sizeof(数组名) 和sizeof(指针)的问题
#include <stdio.h>
void fun(char array[]);
int main()
{
char arr[] = "123456";
char *p = "123456789";
printf("%d\n",sizeof(arr)); //测试1
printf("%d\n",sizeof(p));//测试2
fun(arr);//测试3
return 0;
}
void fun(char array[])
{
printf("%d\n",sizeof(array));
}
结果
7 //sizeof(数组名)
4 //sizeof(指针)
4 //数组作为函数的参数,sizeof(数组名)
测试1:sizeof(数组名)得到的就是字符串占的字节数
测试2:sizeof(指针)得到的是指针占字节数(32位)
测试3 :数组作为函数参数传递,得到的是指针占字节数
总结:
-
数组名并不是完全等同于指针。虽然它们都可以通过指针方式访问数组
-
数组在作为函数参数传递过程中,会退化成指针
-
数组在赋值的时候,会作为指针;但是在计算长度的时候,又变成了数组