C语言中sizeof是什么意思 C语言中,sizeof返回值代表什么意思?

作者&投稿:脂菡 (若有异议请与网页底部的电邮联系)

sizeof是C语言中保留关键字,也可以认为是一种运算符,单目运算符。常见的使用方式:


int a=10;

int arr=[1,2,3];

char str[]="hello";

int len_a = sizeof(a);

int len_arr = sizeof(arr);

int len_str = sizeof(str)

printf("len_a=%d,len_arr=%d,len_str=%d
",len_a,len_arr,len_str)

结果是:len_a=4,len_arr=12,len_str=6

扩展资料:

在 Pascal 语言中,sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位)。

在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。

在Pascal 语言与C语言中,对 sizeof() 的处理都是在编译阶段进行。

sizeof是C/C++中的一个操作符(operator),简单的说其作用就是返回一个对象或者类型所占的内存字节数。

MSDN上的解释为:

The sizeof keyword gives the amount of storage, in bytes, associated with a variable or a type(including aggregate types). This keyword returns a value of type size_t.



参考资料:

百度百科-sizeof



main()
{
char p[]={'a','b','c'},q[]="abc";
//定义字符数组 注意:p和q不同-为q分配4个字节的空间 {'a','b','c','\0'}
printf("%d %d\n",sizeof(p),sizeof(q));
//sizeof 是C里面的关键字 并非函数,意思是数组p和q 所占的内存多少 单位是字节
getch();//用此命令可以在运行的的时候,按任意键退出 ,如果没有此命令,屏幕闪一下就没了(程序结束就退出) 所以看不见结果
注:在VC 中 调试(那个感叹号 )的时候已经内置此命令即使不用getch() 还是可以看到结果的

sizeof是计算对象所占的字节数,通常用来查看变量、数组或结构体等所占的字节个数。
比如:

int a;
char s[]="He likes swim very much."
struct
{
int num;
char name[];
int age;
}person;

sizeof(a); // 计算变量a所占的字节数,等价于sizeof(int)

sizeof(s); // 计算字符串所占的字节数(包括串尾的串结束符'\0'在内)
sizeof(person); // 计算整个结构所占的字节总数

指的是该对象在内存中所占的字节数,
例如:
你的sizeof(p)是3,占三个字节,
sizeof(q)占4个字节
因为字符数组还有一个界定符'\0',用来标识字符串的结束。

char p[]={'a','b','c'},q[]="abc";
给字符数组p赋值,共3个元素:'a','b','c'
给字符数组q赋值,共4个元素:'a','b','c',"\0",因为直接用字符串给字符数组赋值的话,系统最后会加上一个"\0"

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。 
  3、当操作数是指针时,sizeof依赖于编译器。例如Microsoft C/C++7.0中,near类指针字节数为2,far、huge类指针字节数为4。一般Unix的指针字节数为4。 
  4、当操作数具有数组类型时,其结果是数组的总字节数。 
  5、联合类型操作数的sizeof是其最大字节成员的字节数。结构类型操作数的sizeof是这种类型对象的总字节数,包括任何垫补在内。 
  让我们看如下结构: 
  struct {char b; double x;} a; 
  在某些机器上sizeof(a)=12,而一般sizeof(char)+ sizeof(double)=9。 
  这是因为编译器在考虑对齐问题时,在结构中插入空位以控制各成员对象的地址对齐。如double类型的结构成员x要放在被4整除的地址。 
  6、如果操作数是函数中的数组形参或函数类型的形参,sizeof给出其指针的大小。 
四、sizeof与其他操作符的关系 
  sizeof的优先级为2级,比/、%等3级运算符优先级高。它可以与其他操作符一起组成表达式。如i*sizeof(int);其中i为int类型变量。 
五、sizeof的主要用途 
  1、sizeof操作符的一个主要用途是与存储分配和I/O系统那样的例程进行通信。例如: 
  void *malloc(size_t size), 
  size_t fread(void * ptr,size_t size,size_t nmemb,FILE * stream)。 
  2、sizeof的另一个的主要用途是计算数组中元素的个数。例如: 
  void * memset(void * s,int c,sizeof(s))。 
六、建议 
  由于操作数的字节数在实现时可能出现变化,建议在涉及到操作数字节大小时用sizeof来代替常量计算。

sizeof是C/C++中的一个操作符(operator),作用就是返回一个对象或者类型所占的内存字节数。返回值类型为size_t,在头文件stddef.h中定义

这是一个依赖于编译系统的值,一般定义为typedef unsigned int size_t;编译器林林总总,但作为一个规范,都会保证char、signed char和unsigned char的sizeof值为1,毕竟char是编程能用的最小数据类型。
MSDN上的解释为:
The sizeof keyword gives the amount of storage, in bytes, associated with avariable or a
type (including aggregate types). This keyword returns a value of type size_t.
2. 语法:
sizeof有三种语法形式,如下:
1) sizeof( object ); // sizeof( 对象 );
2) sizeof( type_name ); // sizeof( 类型 );
3) sizeof object; // sizeof 对象;
所以以下三种sizeof的使用都是对的:
#include
main()
{
int b;
printf("%d
",sizeof b);
printf("%d
",sizeof(b));
printf("%d
",sizeof(int));
}

4. 基本数据类型的sizeof
这里的基本数据类型指short、int、long、float、double这样的简单内置数据类型,由于它们都是和系统相关的,所以在不同的系统下取值可能不同,这务必引起我们的注意,尽量不要在这方面给自己程序的移植造成麻烦。一般的,在32位编译环境中,sizeof(int)的取值为4。
5. 指针变量的sizeof
等于计算机内部地址总线的宽度。所以在32位计算机中,一个指针变量的返回值必定是4(注意结果是以字节为单位),可以预计,在将来的64位系统中指针变量的sizeof结果为8。
指针变量的sizeof值与指针所指的对象没有任何关系,正是由于所有的指针变量所占内存大小相等,所以MFC消息处理函数使用两个参数WPARAM、LPARAM就能传递各种复杂的消息结构(使用指向结构体的指针)。
6. 数组的sizeof
数组的sizeof值等于数组所占用的内存字节数,如:
char a1[] = "abc";
int a2[3];
sizeof( a1 ); // 结果为4,字符串末尾还存在一个NULL终止符
sizeof( a2 ); // 结果为3*4=12(依赖于int)
sizeof当作了求数组元素的个数是不对的,求数组元素的个数有下面两种写法:int c1 = sizeof(a1)/sizeof(char); // 总长度/单个元素的长度
int c2 = sizeof(a1)/sizeof(a1[0]); // 总长度/第一个元素的长度.注意数组名做函数参数传递时退化为指针。
7. 结构体的sizeof
struct S1
{
char c;
int i;
};
sizeof的结果等于对象或者类型所占的内存字节数,好吧,那就让我们来看看S1的内存分配情况:S1 s1={ 'a', 0xFFFFFFFF };s1的地址为0x0012FF78,其数据内容如下:
0012FF78: 61 CC CC CC FF FF FF FF中间夹杂了3个字节的CC看看MSDN上的说明:When applied to a structure type or variable, sizeof returns the actual size, which may include padding bytes inserted for alignment.

这就是字节对齐!为什么需要字节对齐计算机组成原理教导我们这样有助于加快计算机的取数速度,否则
就得多花指令周期了。为此,编译器默认会对结构体进行处理(实际上其它地方的数
据变量也是如此),让宽度为2的基本数据类型(short等)都位于能被2整除的地址上,让宽度为4的基本
数据类型(int等)都位于能被4整除的地址上,以此类推。这样,两个数中间就可能
需要加入填充字节,所以整个结构体的sizeof值就增长了。
1.sizeof是运算符,跟加减乘除的性质其实是一样的,在编译的时候进行执行,而不是在运行时才执行。
那么如果编程中验证这一点呢?
#include
using namespace std;
int main()
{
int i=1;
cout<<i<<endl;
sizeof(++i);
cout<<i<<endl;
return 1;
}

输入结果为 1
输出结果仍为 1
sizeof中的++i 的副作用并没有显示出来,原因只可能有一个,在编译的时候sizeof执行以后将++i处理了,++i的副作用因此被消除了。如果sizeof 是在运行时进行的话,则肯定要注意++i 。实际上sizeof的实现应该是用宏来做的,宏在编译时进行执行。具体实现可以参考下面。
2.sizeof('a')在C语言中的结果是2,在C++中结果是1,看过某篇文章说C中sizeof侧重于“数”,而C++中sizeof更侧重于“字符”。
3.文章中讲了两个用宏实现sizeof的经典应用
//适用于非数组
#define _sizeof(T) ((size_t)((T*)0 + 1))
//适用于数组
#define array_sizeof(T) ((size_t)(&T+1)-(size_t)(&T))

先举两个小例子说明两个宏的应用,对于第一个如 _sizeof(int); 的结果就是4;对于第二个先声明一个大小为4的数组int a[4];那么array_sizeof(a)结果为16.

对于非数组的宏定义,先是将0转换为T*类型的指针所指向的地址(此时地址为0)。然后对T类型的地址加1,相当于加上了T类型的大小(即得到了非数组T的大小)。前面的size_t只是将地址转化为int型的整数返回。
一个简单的例子:int* p; p=p+1; --------p是一个int*类型的指针, p+1在地址空间上相当于加上了4个字节。

对于数组的宏定义,类似于非数组的宏定义,为了方便理解,这里可以把数组T看成一个用户自定义的类型,&T表示数组类型的指针,对于数组类型指针加1相当于在地址上加上了该数组大小。由于是用户自定义的类型所以不能强制将0转化为数组类型的地址,只能用加1后的地址减去之前的地址,得到的差值就是数组本身所占的字节大小。

C语言中sizeof是什么意思?
答:sizeof是C语言的一个运算操作符,用来计算系统为后面的一对()中的标识符代表的实体分配的内存空间的字节数,比如sizeof(int)计算系统为int型变量分配的字节数(在32位int平台下是4);若有int a;,则sizeof(a)也能计算出系统为int型变量分配的字节数。再如sizeof(已声明过的数组名),就得到系统为...

sizeof是什么意思?
答:sizeof是C语言中保留关键字,也可以认为是一种运算符,单目运算符。常见的使用方式:int a=10;int arr=[1,2,3];char str[]="hello";int len_a = sizeof(a);int len_arr = sizeof(arr);int len_str = sizeof(str)printf("len_a=%d,len_arr=%d,len_str=%d\n",len_a,len_arr,...

C语言中sizeof是什么意思
答:sizeof是C语言中保留关键字,也可以认为是一种运算符,单目运算符。常见的使用方式:int a=10;int arr=[1,2,3];char str[]="hello";int len_a = sizeof(a);int len_arr = sizeof(arr);int len_str = sizeof(str)printf("len_a=%d,len_arr=%d,len_str=%d\n",len_a,len_arr,...

c语言中sizeof的意思是什么下面这道题的答案是什么,请解释一下_百度知...
答:sizeof是指这个数据类型分配的单元内存大小,比如int 是4,等等,所以sizeof(struct date)=4+4+4=12, union类型比较特殊,它的长度大小时内部成员中最大的一个的长度,所以sizeof(m)是其中long的值,也就是8

sizeof在c语言中是什么意思
答:sizeof是C语言中保留关键字,也可以认为是一种运算符,单目运算符。在 Pascal 语言中,sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位);在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。在Pascal 语言与C语言中,对 sizeof() 的处理都是...

计算机C语言中的关键字:sizeof是什么意思?
答:int sizeof(类型或数据);把一个类型作为参数,返回这个类型所需分配的内存为多少字节 如:int x;sizeof(x);//也就是返回x所占的内存大小一般为4,sizeof(int);//也就是返回int型所需要的内存大小,一般也是4 如果你想知道你的计算机上一个int型是多少,那么就可以用sizeof(int);...

C语言中,sizeof返回值代表什么意思?
答:2.sizeof('a')在C语言中的结果是2,在C++中结果是1,看过某篇文章说C中sizeof侧重于“数”,而C++中sizeof更侧重于“字符”。3.文章中讲了两个用宏实现sizeof的经典应用 //适用于非数组 define _sizeof(T) ((size_t)((T*)0 + 1))//适用于数组 define array_sizeof(T) ((size_t...

c语言中sizeof是什么意思
答:用来获得某类型的数据所占字节数

sizeof是什么意思
答:sizeof是一个C或C++语言内置的运算符,用于获取数据类型或变量占用内存的大小,以byte为单位。sizeof可以用于获取任何数据类型或变量的大小,包括基本数据类型、结构、数组、指针等。sizeof在程序中很常用,特别是在动态内存分配和内存管理中。使用sizeof可以帮助程序员精确地分配内存,而不会浪费太多内存资源...

C语言中sizeof是什么意思啊?
答:在 C 语言中,可以使用 sizeof 运算符来计算不同数据类型所占用的空间大小。sizeof 运算符的语法格式如下:sizeof(type)其中,type 是数据类型,可以是 int、char、float、double、struct、union 等等。下面是常见数据类型在 64 位系统中所占用的空间大小:char:1 字节 short:2 字节 int:4 字节 ...