打印
[其它应用]

C语言 获取数组长度且类型通用宏函数程序设计

[复制链接]
2978|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
laocuo1142|  楼主 | 2024-4-17 09:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
之前章节介绍了用于计算类型或变量字节大小的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
免责声明:内容仅供参考,不保证正确性。

使用特权

评论回复
沙发
呐咯密密| | 2024-4-19 11:51 | 只看该作者
sizeof()运算符很常用

使用特权

评论回复
板凳
亚瑟| | 2024-4-23 14:06 | 只看该作者
sizeof是函数还是运算符啊?

使用特权

评论回复
地板
su1yirg| | 2024-4-24 15:34 | 只看该作者
获取长度用sizeof()确实很方便哦

使用特权

评论回复
5
tax2r6c| | 2024-4-24 16:43 | 只看该作者
经常使用sizeof()这个函数,尤其是做数据整理的时候

使用特权

评论回复
6
lamanius| | 2024-4-24 17:45 | 只看该作者
你可以使用以下的宏定义来获取数组的长度,#define ARRAY_LENGTH(arr) (sizeof(arr) / sizeof(arr[0])),这样也行的

使用特权

评论回复
7
l1uyn9b| | 2024-4-24 18:56 | 只看该作者
一般可以宏定义利用了C语言中的sizeof操作符来获取数组的总字节数,然后除以数组中单个元素的字节数,从而得到数组的长度

使用特权

评论回复
8
p0gon9y| | 2024-4-25 21:04 | 只看该作者
其实要是不嫌弃麻烦,用for也可以,不过没有sizeof()来的方便

使用特权

评论回复
9
610u| | 2024-8-27 00:29 | 只看该作者
宏函数 usual_arrlen 通过计算数组总大小除以单个元素的大小,来确定数组的元素个数。这种方法大部分时间是适用于一维数组

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1213

主题

5348

帖子

12

粉丝