sizeof为什么写数组名就能算出数组元素的所占的空间?

数组名代表地址,不是应该返回存储该地址所用的空间大小吗?计算机是如何处理的啊?

sizeof是编译时赋值的,不是运行时赋值的。

编译时要为数组分配存储空间,编译器当然知道它的空间大小。

   

C99支持动态定义数组和sizeof运行时赋值,VC6不支持C99。

int n;
n=10;
charary[n];//C99也支持数组的动态定义
printf("%d\n",sizeof(ary));//ok.输出10

温馨提示:内容为网友见解,仅供参考
无其他回答

sizeof为什么写数组名就能算出数组元素的所占的空间?
sizeof是编译时赋值的,不是运行时赋值的。编译时要为数组分配存储空间,编译器当然知道它的空间大小。C99支持动态定义数组和sizeof运行时赋值,VC6不支持C99。int n;n=10;charary[n];\/\/C99也支持数组的动态定义printf("%d\\n",sizeof(ary));\/\/ok.输出10 ...

c++数组,sizeof()函数的问题
sizeof()是不能根据数组第一个元素的地址就可以得到整个数组的大小的,只能从数组名a才能得到,你可以试一下sizeof( &a[0] ),它的结果绝对 不是整个数组的大小。总结一下:sizeof函数是根据参数的类型算出size的,并不是根据参数的值。比如 long b = 10; short c = 10; sizeof(b) 与 si...

c语言,关于sizeof(数组名)的问题
当数组名作为函数参数传递后,“退化”为指针,sizeof自然也就不能得到数组的长度,只是得到一个指针的长度而已。你的试验代码里,数组名并没有作为函数参数传递过,他还是一个数组名,所以sizeof还是能得到数组的长度。

sizeof()问题
sizeof s\/sizeof s[0]一般是用来计算数组内元素个数的, sizeof s是数组占用的内存空间, sizeof s[0]是第一个元素占用的空间,一除,个数就出来了

sizeof()与sizeof()有何区别?
1、sizeof(a)表示的是数组a在内存中所占用的字节数。当数组a被定义时,编译器会根据数组元素的类型和数量计算出数组a所占用的内存大小,然后使用sizeof运算符可以得到这个大小。2、sizeof(a【0】)表示的是数组a中第一个元素所占用的字节数。在C\/C++中,数组名a可以被看作是指向数组第一个元素...

提问:sizeof(array)为什么是40!
sizeof(array)得到的是数组所占内存大小,也就是数组中所有元素的大小之和。sizeof(*array)得到的是数组中第一个元素所占内存的大小。因为是double型的数组,每个元素double在现在的多数PC机上为64位二进制位,也就是8字节。数组共5个元素,所以大小是40字节。

c语言中的sizeof()是如何分辨数组名和指针的?
因为除非作为sizeof、单目 & 等操作符的操作数,或初始化数组的字符串字面量,数组类型的表达式都会被转换为指向数组首元素的指针。在函数调用printSize(a)中,a作为数组,会在调用时被隐式转换为指向首元素的指针值,然后将这个指针值传给指针类型的参数,非常合理。这种隐式转换被称作指针的退化,因为...

sizeof (数组名)\/4是什么意思
如果是int a[10]; 然后再sizeof(a)\/4的话就是求数组中元素的个数 sizeof是求数组所占内存空间的大小,而数组中元素都是整型的,1个整型占4B,所以除以4后自然是求出的元素个数

详细讲一下 数组大小=sizeof(数组名)\/sizeof(数组类型)
sizeof(数组名)这个是数组的内存空间的大小,sizeof(数组类型)这个是这个数据类型的大小,两者相除不就是一共有多少个int类型的数据么,不就是数组的大小了么

详细讲一下 数组大小=sizeof(数组名)\/sizeof(数组类型)
array是 数组指针 ,sizeof(array)返回 指针 指向的内存空间的 长度 sizeof(int)是每个int 类型 占的内存空间 sizeof(array)\/size(int)就是求出array里有多少个int类型数据,也就是 数组 的长度

相似回答