sizeof函数

前几天腾讯笔试,一道关于sizeof的题做错了,因而想要总结一下关于sizeof的知识,如有不正确的地方,欢迎指正。
1.sizeof()定义

char str[]="Tencent";

求sizeof(str)
先说下我错的思路。
我的想法是,”Tencent”存放于常量存储区,因而在栈上,str里面存放的是”Tencent”地址,相当于一个指针,所以我理所当然的认为sizeof(str)为一个指针的大小。
究其原因,我并没有搞清楚c++内存分布。
sizeof返回的是一个变量或对象在内存中的大小,其实也就是在栈上所分配空间的大小,单位为byte。
区分char str[]=”Tencent”; 与 char *str=”Tencent”;
char str[]=”Tencent”;
str为一个数组,虽然[]内并没有定义数组大小,但是编译器会根据字符串的长度为str在栈上分配内存。而后将”Tencent”写入str,因而sizeof(str)=8。即str内存放的内容为”Tencent”,因而修改str的内容是允许的。

str[1]='A'; //成功

char *str=”Tencent”;
str为一个指针,”Tencent”存放在常量存储区,str内容为”Tencent”的地址,因而只需分配一个地址给str即可。常量区数据不能修改。

str[1]='A'; //错误

2.sizeof(函数)
若求函数的sizeof,相当于求函数返回值的sizeof,注意函数并不执行。
3.sizeof(struct)
求struct大小时,必须要注意内存对齐。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值