C语言中怎么求动态数组大小

先来个简单的例子

int a[] = {1,2,3};

int arr_len = 0;

arr_len = sizeof(a)/sizeof(int);


解释:sizeof() 关键字是求出对象所占用的内存空间的大小,so, sizeof(a)是算出整个数组占用的空间的大小。

因为是整数数组,一个整数在32位系统上占用4个字节,不同的系统数值可能不同, 用sizeof(int)可以计算出

一个整数占用的内存空间大小。所以用sizeof(a)/sizeof(int)数组中有几个整数,也即算出了数组的大小。


下边来个指针数组

char *str[] = {"John", "Jim"};

int str_len = 0;

str_len = sizeof(str)/sizeof(char*);


指针数组顾名思义数组中存放的都是指针,字符指针。我们可以用char *p = "I'm a worker.";

指向一个字符串常量,而把这些指针放在一起不就是上边说的指针数组吗。或许我们用

char*     str[]更能显示的看出上边是指针数组。既然是指针数组那sizeof(str)不就是几个指针占用的空间大小嘛。那除以一个指针所

占用的空间大小不就可以计算出字符指针数组的大小了。


把上边的例子变下

char str[][20] = {"John", "Jim"};

int str_len = 0;

str_len = sizeof(str)/20*sizeof(char);

字符指针数组变成了字符的二维数组。

二维动态数组我们可以看成一个行不固定,列固定(20)的一个表。我们所要计算的就是有几行。sizeof(str)就是计算出这个表占用的总空间的大小,

总空间的大小除以一行占用的空间大小就可以计算出有几行。那一行占用多大空间呢。我们知道一个单元格中存放的是一个char字符sizeof(char)就可以计算出一个单元格所占用的空间大小,那乘以列数(20)就算出一行占用空间的大小了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值