【C语言基础】sizeof(数组名)

C语言数组名容易在以下两种情况混淆。

情况1:数组名代表数组整体("arr[] =" 格式的数组)

当用方括号定义数组时, 数组名代表数组整体。

int a[] = {1,2,3,4};
char b_str[] = "hello";
char c_str[] = {'h','e','l','l','o'};

printf("%d\n",sizeof(a));//数组名表示整个数组的大小,元素类型 int ,有4个元素,所以大小为 4×4 = 16

printf("%d\n",sizeof(b_str));//数组名表示整个数组的大小,元素类型char ,有6个元素(包含'\0'),所以大小为 6
printf("%d\n",sizeof(c_str)); //数组名表示整个数组的大小,元素类型char ,有5个元素,所以大小为 5

 另外,注意区分以下情况:

char *d_str = "hello";//看清楚p这是一个字符指针,指向字符串“hello”、
printf("%d\n",sizeof(d_str)); //d_str是一个指针,所以大小为4
//这种情况如果想得到字符个数,建议采用 <string.h> 的strlen() 函数。

 

情况2:数组名——代表一个指针

当数组名作为函数参数时,在函数体内,自动退化为一个指针。

此时,sizeof(数组名) = 指针大小(32位系统=4)

 

综合例题:sizeof(指针数组的数组名)

1    char *words[] = {"hello", "world", "hi", "space"};
2    cout << sizeof(words); <<endl;

words 是一个指针数组,求 sizeof(words):

这是上述的情况1, 这个数组名代表数组整体。数组的每一个元素的类型是 char * 指针,每个指针大小为4, 总共由4个指针,

则最终结果为 4*4 = 16.

posted @ 2023-10-20 15:24  FBshark  阅读(579)  评论(0编辑  收藏  举报