c语言程序占用存储空间,[华赛面试题] C语言 通过sizeof计算变量占用的存储空间...

本文探讨了C++中sizeof运算符在处理指针和字符数组时的困惑,通过实例解析了sizeof在计算不同类型数据占用内存的误区,并揭示了sizeof('数组名')的实际含义。重点讲解了内存地址与实际数据大小的区别,以及在面试中的典型陷阱案例。
摘要由CSDN通过智能技术生成

#include

#include

void main()

{

char *str();

char *p=str();

int m = sizeof(p);

int n = sizeof(*p);

}

char *str()

{

char strsize[]="Hello";

return strsize;

}

这是原题,大概意思是用一指针指向某字符串,而这个字符串是子函数里的。赋值可行吗?

答题时我通过筛除选项证明了赋值可行,接下来就正式进入计算问题:

p是一个指针,它表明一个内存地址(其值常见如:0XF32F980A),在WinXP VC6.0下占用32bit,即m=4(Byte).

而*p则访问的是一个char值,这里是H。故n=1.

这   里   是   分   隔   线

同样的,如果上面代码中,strsize是一个INT数组,其他代码作相应修改,那么,m值不变,n变成4,代表一人INT型数据占用4字节存储空间。

这   里   是   分   隔   线

下面是另一道面试题,我的同学遇到了,同样的是sizeof的陷阱!代码如下(感谢我的同学,博主wencheng2998):

#include "stdio.h"

#include "stdlib.h"

int main(int argc, char* argv[])

{

char ch1 = 'a';

char ch2[] = "hello";

char ch3[1000] = "luxer_forever!";

int chint[20]={5,4,3,2,1};

int int1 = sizeof(ch1);

int int2 = sizeof(ch2);

int int3 = sizeof(ch3);

int int4 = sizeof(chint);

puts(ch2);

printf("%d/n",int1);

printf("%d/n",int2);

printf("%d/n",int3);

return 0;

}

ch2,涉及到字符数组的地址即首个元素的地址,一度让我觉得sizeof(ch2)=4,因为ch2也是一个类似于0X0012FF74的值,这不就是一个内存地址吗?那它占用的空间当然就是4了。

可实际上,通过访问数组名可以访问全体数组元素,这在ch3这个极端的例子得到体现!

因此,“sizeof(数组名)”表达的就是:数组元素*单个元素占用的存储空间大小!

比如上面的代码中,int3=1000*1=1000, int4=20*4=80.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值