【C语言基础】sizeof(数组名) 到底多大?怎么计算数组元素个数
简短不看版本
在传统C语言中,获取数组元素个数确实不如C++方便,主要是因为:
C语言的传统方式
int arr[10];
int len = sizeof(arr) / sizeof(arr[0]); // 这是标准做法
C++ 的改进:容器自带的size()方法
#include <array>
std::array<int, 10> arr;
size_t len = arr.size(); // 像容器一样
正文:
情况1:方括号数组名——代表数组整体(经典的"arr[] =" 格式的数组)
当用方括号定义数组时, 数组名代表数组整体的字节大小。
int a[] = {1,2,3,4};
char b_str[] = "hello";
char c_str[] = {'h','e','l','l','o'};
printf("%d\n",sizeof(b_str));//数组名表示整个数组的大小,元素类型char ,有6个元素(包含'\0'),所以大小为 6 x 1 =6
printf("%d\n",sizeof(c_str)); //数组名表示整个数组的大小,元素类型char ,有5个元素,所以大小为 5 x 1 =5
printf("%d\n",sizeof(a));//数组名表示整个数组的大小,元素类型 int ,有4个元素,所以大小为 4×4 = 16
因此,对于 int a[], 当要计算元素个数时,需要用 sizeof(a)/sizeof(a[0]);
情况2:数组名——代表一个指针
当 sizeof() 中的参数为一个指针的时候,其大小为指针类型的大小(一般为4)
char *d_str = "hello";//看清楚p这是一个字符指针,指向字符串“hello”、
printf("%d\n",sizeof(d_str)); //d_str是一个指针,所以大小为4
//这种情况如果想得到字符个数,建议采用 <string.h> 的strlen() 函数。
另外,注意区分以下情况:
当数组名作为函数参数时,在函数体内,自动退化为一个指针。
此时,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.

浙公网安备 33010602011771号