之前章节介绍了用于计算类型或变量字节大小的sizeof()运算符,及用来表示数组大小的无符号整数类型size_t,这一节将使用这两个工具来设计一个可以用于获取各种C语言基础类型数组的长度,即数组中元素个数的函数。除了字符数组,字符串字符个数的统计方法,可参考上一章节中的内容。
获取非字符数组长度的宏函数设计
#define usual_arrlen(arr) sizeof(arr) / sizeof(arr[0])
宏函数的设计逻辑
首先,之所以将其定义为一个宏函数,主要是为了适用于不同类型的数组,如果是将其定义为普通的函数,则一般需要再声明函数参数的时候,声明数组的类型,这样函数传参的话就会受到数组类型的约束,因此不适用于大多数的数组类型;
其次,使用sizeof(arr) 获取数组占用的内存空间大小,然后使用sizeof(arr[0])来获取单个数组元素占用的内容空间大小,然后二者相除,即可计算数组元素的个数了;arr[0]中的索引也可以是其它的值,但应该要注意数组访问越界的问题,即索引值不能大于等于数组的长度。
arr[0]中的索引也可以是其它的值,但应该要注意数组访问越界的问题,即索引值不能大于等于数组的长度。
宏函数测试效果
重点提示:C语言和C++中定义多维数组的时候,规范的方法一般是要显式指定元素个数的,这里明知道多维数组元素个数,却还是要“统计”一下,只是为了测试这个宏函数的性能而已:
#include "stdio.h"
#define usual_arrlen(arr) sizeof(arr) / sizeof(arr[0])
int main() {
int int_arr[] = {1,2,3};
double double_arr[] = {0.1,0.2,0.3,0.4,0.5};
size_t int_arrlen = usual_arrlen(int_arr);
size_t double_arrlen = usual_arrlen(double_arr);
// size_t为无符号整型,格式化输出可以使用%u说明符
printf("int_arr数组中的元素个数为:%u\n", int_arrlen);
printf("double_arr数组中的元素个数为:%u\n", double_arrlen);
// 接下来测试一下多维数组是否适用
int int_arr2[2][3] = {{1,2,3},{4,5,6}};
size_t int_arrlen2 = usual_arrlen(int_arr2);
printf("多维数组int_arr2中元素个数为:%u\n",int_arrlen2);
return 0;
}
代码编译后,得到输出:
int_arr数组中的元素个数为:3
double_arr数组中的元素个数为:5
多维数组int_arr2中元素个数为:2
免责声明:内容仅供参考,不保证正确性。 |