根据以下一段程序:
#include<stdio.h>
#include<string.h>
void main()
{
char *str1 = "hello";
char str2[]= "hello";
printf("strlen of str1 = %d, sizeof str1 = %d \n",strlen(str1),sizeof(str1));
printf("strlen of str2 = %d, sizeof str2 = %d \n",strlen(str2),sizeof(str2));
}
我们可以看到输出结果为:
strlen of str1 = 5, sizeof str1 = 4
strlen of str2 = 5, sizeof str2 = 6
两个字符串的长度是一样的,但是大小是不一样的。str1是一个指针所占空间的大小,在32位的Linux系统中char型指针大小为4字节,而str2是这个数组所占空间的大小,且包含一个“\0”,所以大小为6个字节。
注意:数组名作为函数的参数时,会退化为指针;
但是作为sizeof的参数时,不会退化为指针,因为sizeof不是函数而是一个运算符。