#include <stdio.h>
int main(void){
char array[20];
printf( "\nSize of array is %d\n", sizeof(array) ); //outputs 20
printf("\nSize of &array[0] is %d\n", sizeof(&array[0]); //output 4
}
Run Code Online (Sandbox Code Playgroud)
上面的代码给出了20for sizeof(array)和4for sizeof(&array[0]).
我所知道的不是将数组作为参数,而是可以传递它的第一个元素.他们不应该给出与20相同的输出吗?为什么&array[0]给出4作为结果?据我所知,char存储在1个字节中?
md5*_*md5 18
在表达式中sizeof array,array未转换为指针类型.
C11,§6.3.2.1左值,数组和函数指示符
除非它是运算
sizeof符,_Alignof运算符或一元&运算符的操作数,或者是用于初始化数组的字符串文字,否则将类型为''数组'的数组的表达式转换为类型为'的表达式'指向类型'的指针,指向数组对象的初始元素,而不是左值.
因此,它的类型char[20]不是char *.这种类型的大小是sizeof(char) * 20 = 20字节.
C11,§6.5.3.4
sizeof和_Alignof操作员的
sizeof操作者产生其操作数的大小(以字节为单位),其可以是表达或类型的括号名称.大小由操作数的类型确定.
&array[0]类型是char *.这就是为什么sizeof(&array[0])给出与sizeof(char *)(机器上的4个字节)相同的结果.
Mar*_*oun 10
变量array是一个20的数组,char表达式的值sizeof(array)等于20的数组的sizeof字节chars,即20.
&array[0]是一个指针.将sizeof返回一个指针,它是在你的机器4的大小.