C语言中sizeof()的用法

合集下载

sizeof结构体类型

sizeof结构体类型

sizeof结构体类型sizeof是C语言中的一个运算符,用于计算变量或数据类型的大小。

在C语言中,每个数据类型都有一个固定的大小,sizeof运算符可以返回该数据类型的字节数。

sizeof运算符可以用于计算各种数据类型的大小,包括基本数据类型(如int、float等)和自定义数据类型(如结构体和联合体)。

对于基本数据类型,sizeof运算符返回的是该数据类型的字节数。

例如,sizeof(int)返回的是4,表示int类型占用4个字节。

对于结构体类型,sizeof运算符返回的是该结构体的字节数。

结构体可以由多个不同类型的成员变量组成,sizeof运算符会计算出所有成员变量的大小,并将它们相加得到结构体的大小。

下面以一个例子来说明sizeof运算符的使用:```#include <stdio.h>struct Student {int id;char name[20];float score;};int main() {struct Student stu;printf("sizeof(int) = %lu\n", sizeof(int));printf("sizeof(char) = %lu\n", sizeof(char));printf("sizeof(float) = %lu\n", sizeof(float));printf("sizeof(struct Student) = %lu\n", sizeof(struct Student));printf("sizeof(stu) = %lu\n", sizeof(stu));return 0;}```运行上面的代码,输出结果如下:```sizeof(int) = 4sizeof(char) = 1sizeof(float) = 4sizeof(struct Student) = 28sizeof(stu) = 28```从输出结果可以看出,int类型占用4个字节,char类型占用1个字节,float类型占用4个字节,而结构体Student占用28个字节。

C语言--sizeof总结

C语言--sizeof总结

C语⾔--sizeof总结sizeof的语法1:sizeof是C语⾔的关键字,⽤来计算变量、常量或数据类型在当前系统中占⽤内存的字节数。

…2:sizeof不是函数,产⽣这样的疑问是因为sizeof的书写确实有点像函数。

在程序中,sizeof有两种写法:1)⽤于数据类型:sizeof(数据类型)2)⽤于变量名:sizeof(变量名);sizeof变置名 //不建议这样使⽤代码⽰例:#include<stdio.h>int main() {int i;char str[20];printf("sizeof(i) is %d\n", sizeof(i));printf("sizeof i is %d\n", sizeof i);printf("sizeof int is %d\n", sizeof(int));//printf("sizeof int is %d\n", sizeof int);错误写法printf("sizeof(str) is %d\n", sizeof(str));printf("sizeof str is %d\n", sizeof str);printf("sizeof str is %d\n", sizeof (char[20]));//printf("sizeof str is %d\n", sizeof char[20]);错误写法printf("sizeof(365) is %d\n", sizeof(365));printf("sizeof(i love you) is %d\n", sizeof("i love you"));}结果:注:最后⼀个字符串之所以是11,是因为在C语⾔中字符串后边会默认添加⼀个结束符,也就是'\0'sizeof与strlensizeof是运算符,⽤来计算变量、常量或数据类型在当前系统中占⽤内存的字节数strlen是函数,⽤于计算字符串的实际长度代码⽰例:char ch[20];strcpy(ch, "i love you");printf("sizeof(ch) is %d\n", sizeof(ch));//地址长度20,不变printf("strlen(ch) is %d\n", strlen(ch));//字符串的实际长度,也就是i love you的长度,为10结构体内存对齐⾸先看⼀个例⼦:struct S{char a;int b;char c;};我们先来计算⼀下这个结构体的⼤⼩,如果不存在内存对齐这个问题,按理说这个结构体应该占(1+4+1)6个字节;然⽽事实上它占了12个字节,为什么?我们需要解决下⾯⼏个问题。

c语言 sizeof 结构体指针

c语言 sizeof 结构体指针

c语言 sizeof 结构体指针
在C语言中,sizeof操作符用于获取数据类型或变量的大小,
而结构体指针是指向结构体变量的指针。

当我们使用sizeof操作符
来获取结构体指针的大小时,实际上是获取指针变量的大小,而不
是指向的结构体的大小。

在C语言中,结构体指针的大小与指针变量的大小相同,通常
是与系统的位数相关的固定大小。

例如,在32位系统中,指针的大
小通常是4个字节,在64位系统中,指针的大小通常是8个字节。

这意味着无论结构体的大小是多少,结构体指针的大小都是固定的。

结构体指针的大小并不取决于结构体本身的大小,而是取决于
系统架构和编译器的实现。

因此,无论结构体的大小如何,结构体
指针的大小都是固定的。

需要注意的是,结构体指针的大小与结构体本身的大小是不同
的概念。

结构体的大小取决于其成员变量的大小和对齐方式,而结
构体指针的大小只取决于系统架构和编译器的实现。

总之,当你使用sizeof操作符来获取结构体指针的大小时,你
实际上获取的是指针变量的大小,而不是指向的结构体的大小。

这一点在内存分配和指针运算时需要特别注意。

c语言sizeof的返回值类型

c语言sizeof的返回值类型

c语言sizeof的返回值类型C语言中的sizeof关键字是一个用来获取数据类型或变量字节大小的运算符。

它的返回值类型是一个无符号整数,通常用size_t表示,其实质是一个unsigned int类型。

sizeof操作符可以用于获取各种数据类型的字节大小,包括基本数据类型(如int、float、double等)、自定义数据类型(如结构体、联合体等)以及指针类型。

在C语言中,每种数据类型都占用一定的内存空间,而sizeof可以帮助我们准确地获取到这个大小。

在使用sizeof时,可以使用两种形式。

一种是sizeof(类型),用来获取指定类型的字节大小;另一种是sizeof(变量),用来获取指定变量的字节大小。

例如,sizeof(int)可以获取int类型的字节大小,sizeof(float)可以获取float类型的字节大小,sizeof(struct Student)可以获取自定义结构体Student的字节大小。

需要注意的是,sizeof操作符并不会真正地计算变量或类型的字节大小,它在编译时就会被替换成一个常量。

这意味着sizeof操作符的计算结果是在编译时确定的,并不会因为程序运行时的实际数据而变化。

sizeof操作符的返回值类型是一个无符号整数,这是为了确保能够表示所有可能的字节大小。

无符号整数与有符号整数的区别在于,无符号整数只能表示非负数,而有符号整数可以表示正负数。

由于sizeof操作符获取的是字节大小,因此它的返回值类型必须是无符号整数,以确保能够表示所有可能的字节大小。

在实际编程中,sizeof操作符经常与其他运算符一起使用,例如在动态内存分配中,可以使用sizeof操作符来计算需要分配的内存空间大小。

另外,sizeof操作符还可以用来帮助判断数据类型的字节对齐方式,以及在处理网络通信或文件IO时,计算数据的字节大小。

需要注意的是,sizeof操作符不能直接用于获取动态分配的内存空间的大小。

SIZEOF函数使用

SIZEOF函数使用

SIZEOF函数使用SIZEOF函数是一种在编程语言中常见的操作符,用于计算给定数据类型或对象的大小。

在不同的编程语言中,SIZEOF函数的具体用法和功能可能有所不同,但其基本目的都是为了测量特定类型或对象在内存中所占用的字节数。

在C语言中,SIZEOF函数是一个运算符而不是一个函数,用于计算给定类型的对象或表达式所占用的字节数。

这可以用来确定数据类型在内存中所占的空间,从而有效地进行内存管理。

例如,在声明数组时,可以使用SIZEOF函数计算数组的大小而不需要手动输入具体的字节数。

以下是一个示例:```c#include <stdio.h>int maiint arr[5];size_t size = sizeof(arr);printf("The size of the array is: %zu\n", size);return 0;```在上面的例子中,sizeof(arr)会返回整数数组arr所占用的字节数,然后将其打印到控制台。

在C++语言中,SIZEOF函数功能与C语言相同,但使用方式略有不同。

下面是一个使用SIZEOF函数的C++示例:```cpp#include <iostream>using namespace std;int maiint arr[5];size_t size = sizeof(arr);cout << "The size of the array is: " << size << endl;return 0;```在上面的示例中,SIZEOF函数用于计算整数数组arr的字节数,并将结果打印到控制台。

在其他编程语言中,如Java和Python,可能没有明确的SIZEOF函数,但可以使用其他方法来获取对象或类型的大小。

例如,在Java中,可以使用ng.instrument包中的Instrumentation类来测量对象的大小。

c语言中sizeof的用法

c语言中sizeof的用法

c语言中sizeof的用法1. sizeof()函数是C语言中最常用的一个内置(built-in)函数,它可以获取指定变量或者类型的大小,单位是字节(byte)。

这个函数可以用在任何表达式中,可以通过把函数放入括号中可以获得其结果,比如:a = sizeof (int);2. sizeof()函数可以获取宏定义(macro definition)、数据类型、结构体(struct)和数组的大小,比如:#define MAXSIZE 100 //宏定义变量struct student {char name[20];int grade;};char c[] = "hello world";3. sizeof()函数的两种用法:(1)通过变量作为参数:int a = 10;b = sizeof (a); //b = 4;(2)通过数据类型作为参数:4. 在C语言中,sizeof()函数不管参数是什么,结果都是字节(byte)为单位,这也就是说如果变量数据类型为int时,sizeof()函数获取的结果就是4字节;而char型变量,sizeof()函数获取的结果就是1字节。

5. C语言中sizeof()函数的使用场景有:(1)在函数中,使用sizeof()函数把一个数组里的元素个数和每个元素的大小结合起来,就可以确定数组的总大小。

(2)当构造一个动态分配的数组时,由于动态分配的变量的类型不一定,因此可以使用sizeof()函数获取分配的数组大小,以便保证空间的足够分配。

(3)sizeof()函数还可以用来作类型转换,通过它可以把一个原始类型转换成另一种类型,例如将char型变量转换成int型变量。

6.总结sizeof()函数是C语言中最常用的内置函数,可以获取指定变量或者类型的大小,用于数组大小的计算,动态内存空间的分配,以及一些类型转换。

C语言中sizeof的用法总结

C语言中sizeof的用法总结

C语言中sizeof的用法总结一、sizeof的概念sizeof是C语言的一种单目操作符,如C语言的其他操作符++、--等。

它并不是函数。

sizeof操作符以字节形式给出了其操作数的存储大小。

操作数可以是一个表达式或括在括号内的类型名。

操作数的存储大小由操作数的类型决定。

二、sizeof的使用方法1、用于数据类型sizeof使用形式:sizeof(type)数据类型必须用括号括住。

如sizeof(int)。

2、用于变量sizeof使用形式:sizeof(var_name)或sizeof var_name变量名可以不用括号括住。

如sizeof (var_name),sizeof var_name等都是正确形式。

带括号的用法更普遍,大多数程序员采用这种形式。

注意:sizeof操作符不能用于函数类型,不完全类型或位字段。

不完全类型指具有未知存储大小的数据类型,如未知存储大小的数组类型、未知内容的结构或联合类型、void类型等。

如sizeof(max)若此时变量max定义为int max(),sizeof(char_v) 若此时char_v定义为char char_v [MAX]且MAX未知,sizeof(void)都不是正确形式。

三、sizeof的结果sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。

该类型保证能容纳实现所建立的最大对象的字节大小。

1、若操作数具有类型char、unsigned char或signed char,其结果等于1。

ANSI C正式规定字符类型为1字节。

2、int、unsigned int 、short int、unsigned short 、long int 、unsigned long 、float、double、long double类型的sizeof 在ANSI C中没有具体规定,大小依赖于实现,一般可能分别为2、2、2、2、4、4、4、8、10。

sizeof如何计算数组大小原理

sizeof如何计算数组大小原理

sizeof如何计算数组大小原理sizeof如何计算数组大小原理什么是sizeofsizeof是C语言中的一个操作符,用于计算数据类型或变量的大小(字节数)。

sizeof的基本用法int size = sizeof(int);上述代码将会得到一个整型变量的大小(字节数),并将其赋值给size。

sizeof和数组在C语言中,使用sizeof操作符计算数组的大小非常方便,可以用于静态数组和动态数组。

静态数组int arr[5];int size = sizeof(arr);上述代码将会得到整型数组arr的大小(字节数),并将其赋值给size。

动态数组int* arr = malloc(sizeof(int) * 5);int size = sizeof(arr);上述代码将会得到整型动态数组arr的大小(字节数),并将其赋值给size。

需要注意的是,sizeof(arr)返回的是指针arr的大小,而不是动态数组元素个数乘以每个元素所占的大小。

sizeof计算数组大小的原理静态数组静态数组在编译阶段就已经分配了内存空间,所以sizeof操作符直接返回数组的大小。

动态数组动态数组在运行时才能确定大小,所以sizeof操作符无法直接返回数组的大小,而是返回指针的大小。

为了获取动态数组的大小,我们可以通过以下方法:int* arr = malloc(sizeof(int) * 5);int num_elements = 5;int size = sizeof(int) * num_elements;上述代码中,我们通过变量num_elements保存动态数组元素的个数,然后使用sizeof操作符计算每个元素所占的大小,再将其与num_elements相乘,即可得到整个动态数组的大小。

注意,这种方法只适用于已知动态数组元素个数的情况。

另一种方法是使用sizeof操作符计算指针的大小,然后通过除法计算出元素个数:int* arr = malloc(sizeof(int) * 5);int size = sizeof(arr) / sizeof(int);上述代码中,sizeof(arr)返回的是指针arr的大小,sizeof(int)返回的是整型的大小,通过除法运算就可以得到动态数组的元素个数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C语言中sizeof()的用法
2008-12-31 09:45:35.0 来源:51CTO
关键词:C语言
要参加软件研发的笔试(C/C++)几乎都会涉及到sizeof()的用法,我昨天也遇到了,有的也会,但是真正sizeof()的核心还是没有领会,今天上网,无聊中就看到了详细的sizeof()的阐述,现在分享给大家。

------------sizeof----------------
sizeof 一般形式为:sizeof(object),也可以sizeof var_char,不过大部分programer 习惯用sizeof()。

对象可以是表达式或者数据类型名,当对象是表达式时,括号可省略。

sizeof是单目运算符,其运算符的含义是:求出对象在计算机内存中所占用的字节数。

一般来讲,不同的机器,运行不同的对象是不一样的,当目前几乎所有的机器都是32位,很少16位的,所以一般考试都是基于32位的window和linux的。

C语言中数据类型不多。

1.整数型的:
short,int,long(我没有考虑符号问题),一般c语言书上讲,int是2个字节的,即16位,范围是-32768-32767,long是4个字节,范围是-2^32---2^32-1。

当时在xp上运行sizeof(int)的时候,会output 4.这就是32位的原因。

sizeof(long)也是4.
如下:#include "stdio.h"
#include "string.h"
#include "stdlib.h"
int main()
{
short int sa=10;
int a=10;
long la=10;
float f = 20;
double d=20;
char ch=''c'';
char str[]="ABC";
char *p=str;
struct str{
double d;
char ch;
int data;
}str_wu;
struct str1{
char ch;
double d;
int data;
}str_wu1;
printf("sizeof(short):%d\n",sizeof(sa));
printf("sizeof(int):%d\n",sizeof(a));
printf("sizeof(long):%d\n",sizeof(la));
printf("sizeof(float):%d\n",sizeof(f));
printf("sizeof(double):%d\n",sizeof(d));
printf("sizeof(char):%d\n",sizeof(ch));
printf("sizeof(string):%d\n",sizeof(str));
printf("sizeof(point address):%d\n",sizeof(p));
printf("sizeof(Point):%d\n",sizeof(*p));
printf("sizeof(Struct):%d\n",sizeof(str_wu));
printf("sizeof(Struct):%d\n",sizeof(str_wu1));
system("pause");
}
因而int,short的sizeof结果是一样的额。

2.浮点型数据
float,double,long double
上边的图,long double 没有测试(忘了。

)呵呵!
但是应该是16。

3。

指针
对于指针,要特别区分,指针指向什么数据,它在内存占的字节数才是它的结果。

比如:指针指向一个字符串,就是字符串的长度,因为一个字符在内存中占一个字节。

若指针指向一个数据结构,则结果应该是结构型数据的内存字节数。

4。

结构类型
在上面的程序中,
struct str{
double d;
char ch;
int data;
}str_wu;
struct str1{
char ch;
double d;
int data;
}str_wu1;
两个不同的结构,但是内部的元素是相同的,都是double,int,char,只是顺序不一样,就结果不一样。

why?
这时因为VC存储数据的时候要对其,具体的情况如下:
类型
对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量)
Char
偏移量必须为sizeof(char)即1的倍数
int
偏移量必须为sizeof(int)即4的倍数
float
偏移量必须为sizeof(float)即4的倍数
double
偏移量必须为sizeof(double)即8的倍数
Short
偏移量必须为sizeof(short)即2的倍数
比如:str_wu,为上面的结构分配空间的时候,VC根据成员变量出现的顺序和对齐方式,先为第一个成员dda1分配空间,其起始地址跟结构的起始地址相同(刚好偏移量0刚好为sizeof(double)的倍数),该成员变量占用sizeof(double)=8个字节;接下来为第二个成员dda分配空间,这时下一个可以分配的地址对于结构的起始地址的偏移量为8,是sizeof(char)的倍数,所以把dda存放在偏移量为8的地方满足对齐方式,该成员变量占用sizeof(char)=1个字节;接下来为第三个成员type分配空间,这时下一个可以分配的地址对于结构的起始地址的偏移量为9,不是sizeof(int)=4的倍数,为了满足对齐方式对偏移量的约束问题,VC自动填充3个字节(这三个字节没有放什么东西),这时下一个可以分配的地址对于结构的起始地址的偏移量为12,刚好是sizeof(int)=4的倍数,所以把type存放在偏移量为12的地方,该成员变量占用sizeof(int)=4个字节;这时整个结构的成员变量已经都分配了空间,总的占用的空间大小为:8+1+3+4=16,刚好为结构的字节边界数(即结构中占用最大空间的类型所占用的字节数sizeof(double)=8)的倍数,所以没有空缺的字节需要填充。

所以整个结构的大小为:sizeof(str_wu)=8+1+3+4=16,其中有3个字节是VC自动填充的,没有放任何有意义的东西。

而str_wu1,同样的道理:如下:sizeof(char)=1,而1不是8的倍数,因而增加到8,sizeof(double)=8,现在开始地址是16,16是sizeof(int)的倍数,可以存入。

因而总的地址数:sizeof(char)+7+sizeof(double)+sizeof(int)=20,
而20不是8的倍数(sizeof(double)=8),所以需要在增加4个地址,即总共24。

----------------------
sizeof具体的,我所知道的就这些了,那位高手还知道什么,或者我写的有什么错,希望指出。

谢谢!。

相关文档
最新文档