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);sizeof 指针
字符指针数组变成了字符的⼆维数组。
⼆维动态数组我们可以看成⼀个⾏不固定,列固定(20)的⼀个表。我们所要计算的就是有⼏⾏。sizeof(str)就是计算出这个表占⽤的总空间的⼤⼩,
总空间的⼤⼩除以⼀⾏占⽤的空间⼤⼩就可以计算出有⼏⾏。那⼀⾏占⽤多⼤空间呢。我们知道⼀个单元格中存放的是⼀个char字符sizeof(char)就可以计算出⼀个单元格所占⽤的空间⼤⼩,那乘以列数(20)就算出⼀⾏占⽤空间的⼤⼩了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论