C中的sizeof()函数

Shi*_*ale 3 c arrays pointers

main()
{
char a[] = "Visual C++";
char *b = "Visual C++";
printf("\n %d %d",sizeof(a),sizeof(b));
printf("\n %d %d",sizeof(*a),sizeof(*b));
}
Run Code Online (Sandbox Code Playgroud)

sizeof(a)给我输出:( 11 即字符串的长度)

为什么会这样?
为什么不输出sizeof(a)= 4因为当我尝试打印a它时给我一个地址值,因此是一个整数?

Viv*_*ran 10

每当你在程序中引用数组的名称时,它通常会衰减到指向数组第一个元素的指针.该规则的一个例外是sizeof运营商.所以当你考虑以下代码时.

int main()
{
   char a[] = "Visual C++";
   printf("sizeof(a)=%d\n",sizeof(a)); /* Here sizeof(a) indicates sizeof array */
   printf("a=%p",a); /* Here the array name, passed as an argument to printf decays into a pointer of type (char *) */
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 为了扩展它:使用的正确术语是"数组衰减成指针"或"隐式转换为指针". (3认同)