user-0 提问: 数组

回复:
user: user-1
content: sizeof 实际上，可以认为是预编译运算符。 不能看作，真正的 C或者C++ 语言的运算符。 sizeof 中的表达式，不需要真正求值。

user: user-0
content: 看了大家的回答，自己又学到了一点，谢谢各位！

user: user-2
content: 第一个是 整个数组的字节  4*100=400 第二个只是一个INT元素的字节  所以是4

user: user-0
content: 数组的下标最大不应该是99吗？a代表的是数组的首地址，sizeof（a）的感觉应该是4啊，c语言新手，还求大神多指点？

user: user-0
content: 数组的下标最大不应该是99吗？a代表的是数组的首地址，sizeof（a）的感觉应该是4啊，c语言新手，还求大神多指点？

user: user-0
content: 数组的下标最大不应该是99吗？a代表的是数组的首地址，sizeof（a）的感觉应该是4啊，c语言新手，还求大神多指点？

user: user-3
content: a[100]是一个int元素而已，所以是4个字节。  引用 楼主 u012515459 的回复:#include"stdio.h" void main(void) { 	int a[100]; 	printf("%3d",sizeof(a)); 	printf("%3d",sizeof(a[100])); } 为什么第一个值是400，第二个值是4，求解答？

user: user-4
content: 引用 3 楼 u012515459 的回复:数组的下标最大不应该是99吗？a代表的是数组的首地址，sizeof（a）的感觉应该是4啊，c语言新手，还求大神多指点？ 对数组使用sizeof的时候，得到数组的大小。

user: user-5
content: 第一个表示整个数组大小，因为指针指向一个数组，第二个表示一个元素大小

user: user-6
content: sizeof只需表达式的类型，不需要计算。a[100]的类型是int

user: user-7
content: 引用 楼主 u012515459 的回复:#include"stdio.h" void main(void) { 	int a[100]; 	printf("%3d",sizeof(a)); 	printf("%3d",sizeof(a[100])); } 为什么第一个值是400，第二个值是4，求解答？ sizeof(a) == 4*100;a是一个拥有100个int元素的数组； sizeof*(a[100]) == 4;a[100]就相当于a中的其中一个int元素

user: user-8
content: 引用 4 楼 u012515459 的回复:数组的下标最大不应该是99吗？a代表的是数组的首地址，sizeof（a）的感觉应该是4啊，c语言新手，还求大神多指点？ sizeof (a[100]) 这里的a[100] 没进行求值 不求值 自然没有什么越界的问题

user: user-9
content: sizeof Operator sizeof expression  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.  The expression is either an identifier or a type-cast expression (a type specifier enclosed in parentheses).  When applied to a structure type or variable, sizeof returns the actual size, which may include padding bytes inserted for alignment. When applied to a statically dimensioned array, sizeof returns the size of the entire array. The sizeof operator cannot return the size of dynamically allocated arrays or external arrays.  For related information, see Operators.  Example  // Example of the sizeof keyword size_t  i = sizeof( int );   struct align_depends {     char c;     int i; }; size_t size = sizeof(align_depends);  // The value of size depends on                                     //  the value set with /Zp or                                     //  #pragma pack  int  array[] = { 1, 2, 3, 4, 5 };     // sizeof( array ) is 20                                        // sizeof( array[0] ) is 4  size_t  sizearr =                        // Count of items in array    sizeof( array ) / sizeof( array[0] );

user: user-10
content: 引用 5 楼 Automation_dmu 的回复:不要混淆数组和指针的概念，当作为函数参数时，数组名退化为数组首元素的地址，但是sizeof 例外，在sizeof里数组名的语义是数组。  引用 4 楼 u012515459 的回复:数组的下标最大不应该是99吗？a代表的是数组的首地址，sizeof（a）的感觉应该是4啊，c语言新手，还求大神多指点？+1 In main, the name array is an array so you get the size in bytes of the array with sizeof. However, an array decays to a pointer when passed to a function, so you get sizeof(int*) inside the function.  void foo ( char a[100] );和 void foo ( char * a );是一样的，都是传递了数组的首地址而已。  但是注意，sizeof不是函数，在main函数内部使用sizeof(array)，这里的array是一个实实在在的数组，所以第一个printf("%3d",sizeof(a));打印400是没问题的。  第二个，我也不太明白，确实是越界了，我的想法是sizeof不会去检查是否越界，直接检查变量的类型，然后得出长度。   ------------------------------

user: user-11
content: 不要混淆数组和指针的概念，当作为函数参数是，数组名退化为数组首元素的地址，但是sizeof 例外，在sizeof里数组名的语义是数组。  引用 4 楼 u012515459 的回复:数组的下标最大不应该是99吗？a代表的是数组的首地址，sizeof（a）的感觉应该是4啊，c语言新手，还求大神多指点？