c语言动态数组中如何计算一个数组占内存多少空间

C语言中多维数组的内存分配和释放_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C语言中多维数组的内存分配和释放
上传于|0|0|文档简介
&&你要的答案
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢2016年10月优秀大版主2016年8月优秀大版主
2016年9月 总版技术专家分月排行榜第二
2016年10月优秀大版主2016年8月优秀大版主
2016年9月 总版技术专家分月排行榜第二
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。C语言学习入门 (三) sizeof 函数、内存地址、数组
sizeof可以用来计算一个变量或者一个常量、一种数据类型所占的内存字节数。
sizeof(10);
char c = 'a';
sizeof(c);
sizeof(float);
1.计算机中的内存是以字节为单位的存储空间。内存的每一个字节都有一个唯一的编号,这个编号就称为地址。
凡存放在内存中的程序和数据都有一个地址,也就是说,一个函数也有自己的内存地址
当定义一个变量时,就分配一个带有唯一地址的存储单元来存储这个变量。比如:
char a = 'A';// A的ASCII值为65
int b[] = {66,33};
在16bit编译器环境下,系统为a、b分别分配1个字节、2个字节的存储单元。变量存储单元的第一个字节的地址就是该变量的地址。
可以看出,变量a的地址是ffc3;变量b的地址是ffc1。内存中存储的都是2进制数据
一维数组vc3Ryb25nPjwvcD4KPHA+Crao0uW1xNDOyr3OqqO6PHN0cm9uZz7A4NDNICDK/dfpw/tb1KrL2Lj2yv1dPC9zdHJvbmc+PC9wPgo8cD4KaW50IGFbNV07IDwvcD4KPHA+CmludCBbXSBhOyDV4tH50LTKx7TttcQgsrvNrNPaamF2YdC01Nqx5MG/w/vHsLrztrzQ0CAgx9K2qNLlyrHQ6NKq1ri2qNSqy9i49sr9PC9wPgo8cD4Ks/XKvLuvo7o8L3A+CjxwPgppbnQgYVsyXSA9IHs4LDEwfTs8L3A+CjxwPgrG5Mq1z+C1sdPao7o8L3A+CjxwPgppbnQgYVsyXTs8L3A+CjxwPgphWzBdID0gODs8L3A+CjxwPgphWzFdID0gMTA7PC9wPgo8cD4K1KrL2CYjMjA1NDA7wdCx7b/J0tTKx8r91+nL+dPQ1KrL2LXEs/UmIzIwNTQwO6Os0rK/ydLUysfHsMPmsr+31tSqy9i1xLP1JiMyMDU0MDs8L3A+CjxwPgppbnQgYVs0XSA9IHsyLDV9OyAg1eLR+b7NuLMmIzIwNTQwO7j4YVswXT0yO2FbMV09NTsgCiBhWzJdPWFbM109xKzIzyYjMjA1NDA7MDwvcD4KPHA+Cjxicj4KPC9wPgo8cD4KtbG2qNLlsqLWsb3Ts/XKvLuvyrEgv8nS1LK71ri2qNSqy9i49sr9PC9wPgo8cD4KaW50IGFbXSA9IHsyLDMsNX07PC9wPgo8cD4Kyv3X6bP1yry7r8qxtcS4syYjMjA1NDA7t73Kvda7xNzTw9Payv3X6bXEtqjS5aOstqjS5dauuvPWu8Tc0ru49tSqy9jSu7j21KrL2LXYuLMmIzIwNTQwOzwvcD4KPHA+CmludCBhWzNdOzwvcD4KPHA+CmEgPSB7MSwyLDN9Oy8vtO3O86GjIAog0vLOqiDK/dfpw/thILT6se2x5MG/tcS12Na3o6zKx7j2s6PBv6OsuPizo8G/uLMmIzIwNTQwO77NtO3ByzwvcD4KPHA+Cjxicj4KPC9wPgo8cD4KtbHK/dfp1/fOqsq1ss7KsaOs0vLOqrSrtd21xMrH0ru49rXY1rejrMv50tTQzrLOuMSx5KOsyrWyztKyu+G4xLHkPC9wPgo8cD4KPHN0cm9uZz62/s6syv3X6Twvc3Ryb25nPjwvcD4KPHA+Crao0uXQzsq9o7o8c3Ryb25nPsDg0M0gIMr91+nD+1vQ0Mr9XVvB0Mr9XTwvc3Ryb25nPjwvcD4KPHA+CmludCBhWzJdWzNdOy8vubIy0NAzwdCjrDa49tSqy9ijrAogvLQgwb249rD8uqzI/bj21KrL2LXE0rvOrMr91+k8L3A+CjxwPgo8YnI+CjwvcD4KPHA+CtTaxNq05tbQtcS05rSix+m/9qOswP3I52ludCBhWzJdWzJdPC9wPgo8aW1nIHNyYz0="/uploadfile/Collfiles/4.png" width="400" height="150" alt="\">
(注意:a[0]、a[1]也是数组,是一维数组,而且a[0]、a[1]就是数组名,因此a[0]、a[1]就代表着这个一维数组的地址)
1> 数组a的地址是ffc1,数组a[0]的地址也是ffc1,即a = a[0];
2> 元素a[0][0]的地址是ffc1,所以数组a[0]的地址和元素a[0][0]的地址相同,即a[0] = &a[0][0];
3> 最终可以得出结论:a = a[0] = &a[0][0],以此类推,可以得出a[1] = &a[1][0]
printf("%p\n%p\n%p", a, a[0], &a[0][0]);
二维数组的初始化
按行进行初始化
int a[2][3] = { {2,2,3},
{3,4,5} };
* 按存储顺序进行初始化(先存放第1行,再存放第2行)
int a[2][3] = {2,2,3,3,4,5};
* 对部分元素进行初始化
int a[2][3] = { {2}, {3,4}
int b[3][3] = { { }, { , ,2}, {1,2,3}};
* 如果只初始化了部分元素,可以省略行数,但是不可以省略列数
int a[][3] = {1,2,3,4,5,6};
int a[][3] = {{1,2,3},
{3,5}, {}};
为什么不能只省略列数呢? 因为int a[2][]={1,2,3,4,5,6} 这样无法确定元素在哪一行。1281人阅读
Linux&&C(45)
C语言 数组、字符串长度及所占内存
& & &&今天我们的快译通软件算是告一段落啦,把最后遇到的一个问题记录下来,也算是对自己掌握知识点含糊不清,想当然的一个教训吧!
& & 当我们把二进制索引文件的索引头加载到内存哈希表中获取所查单词在文件中的偏移量时并没出问题,但是打印单词的解释时解释后面会有乱码。后来知道是因为&\0&的问题。
& &&#include &stdio.h&
#include &string.h&
int main(void)
char str[100]=&hello&;
char *str1=&hello&;
printf(&the len of str:%d\n&,strlen(str));
printf(&the size of str:%d\n&,sizeof(str));
printf(&the len of str1:%d\n&,strlen(str1));
printf(&the size of str1:%d\n&,sizeof(str1));
}& &如上代码:
& &char str[100];数组在定义时就分配好内存,即str数组所占内存为100,但其长度为5,我们也可以知道strlen函数求长度并不统计&\0&,指针的长度固定就是占4个字节。
& &当我们定义一个100的字符数组时,它最多可以存放99个字符,最后一个给&\0&作为字符串结束标志。
& &我们出错的地方是:
& &我们从文件中往char str[100]中写字符,并没有放满,但我忽略了把&\0&也放入str数组,导致 & printf(&%s&,str)时出错。因为没存放&\0&字符串结束标志,所以打印数组的所有东西,导致打印单词解释时出现多余的东西。&&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:76640次
积分:1518
积分:1518
排名:千里之外
原创:72篇
转载:27篇
阅读:12948
(1)(1)(2)(2)(3)(5)(11)(4)(5)(2)(1)(3)(3)(1)(1)(5)(17)(14)(4)(12)(2)

我要回帖

更多关于 c语言数组内存分配 的文章

 

随机推荐