如何获取数组实际使用大小?sizeof计算结果不符问题
如何获取C语言数组的实际使用大小?
你用sizeof(arr)/sizeof(arr[0])得到的是数组的总容量50,这是因为sizeof是编译阶段就计算好的——它只认你声明时写的数组长度,根本不知道你实际只用了10个元素。
要拿到实际使用的大小,C语言本身没有自动检测的办法,得靠你手动维护,这里给几个实用的方案:
手动维护计数变量
声明一个单独的变量,专门记录实际用了多少元素,比如:int arr[50]; int used_size = 10; // 直接把实际使用的数量存这里 for (int i = 0; i < used_size; i++) { arr[i] += 5; } // 之后要用实际大小,直接用used_size就行这种方式简单直接,适合你已经明确知道使用范围的场景。
用动态分配数组
如果实际使用的大小是运行时才确定的,不如直接按需分配内存,同时用变量保存这个大小:int used_size = 10; int *arr = malloc(used_size * sizeof(int)); if (arr == NULL) { // 记得处理内存分配失败的情况 return 1; } for (int i = 0; i < used_size; i++) { arr[i] += 5; } // 这里used_size就是实际使用的大小 free(arr); // 用完别忘了释放内存用结构体封装数组和大小
把数组和计数变量打包在一起,避免单独维护变量容易搞混:typedef struct { int data[50]; int used_size; } ArrayWithSize; ArrayWithSize arr_struct; arr_struct.used_size = 10; for (int i = 0; i < arr_struct.used_size; i++) { arr_struct.data[i] += 5; } // 取实际大小就用arr_struct.used_size
总结一下:静态数组的总大小是编译期固定的,C不会帮你跟踪哪些元素被用过,必须自己手动记录实际使用的数量。
内容的提问来源于stack exchange,提问作者lena
相关产品推荐
相关产品推荐

