关于sizeof相关注意点

1.sizeof( )内部不参与运算,内部不会真实访问空间,不会进行计算的

int main()
{
	short s = 3;
	int a = 12;
	printf("%d", sizeof(s = a + 2));
	printf("%d", s);
	return 0;
}

在这里插入图片描述
解析:

int main()
{
	short s = 3;//短整形
	int a = 12;//整形
	printf("%d", sizeof(s = a + 2));
	//a是整形,2是整形,相加还是整形,但s是短整形,所以最后的类型还是短整形
	//内部不会真实的进行a+2这个计算
	printf("%d", s);
	//s还是3;
	return 0;

2.sizeof()是根据类型来计算大小的,如果知道类型就知道大小

例子:

int main()
{

	int a = 10;
	printf("%d\n", sizeof(a));
	printf("%d\n", sizeof(int));
	return 0;
}

在这里插入图片描述
例子:

int main()
{
	int arr[3][4] = { 0 };
	printf("%d", sizeof(arr[3]));
	return 0;
}

在这里插入图片描述
解析:

int main()
{
	int arr[3][4] = { 0 };
	//二维数组3行四列
	printf("%d", sizeof(arr[3]));
	//arr[3]表示第四行数组名,可能你们会想这个数组不是才有3行吗,这不是越界访问了吗
	//其实不是的喔,假设这个数组有第四行,那么size(第四行数组名)表示计算的第四行整个大小为16
	//想一下,sizeof()其实不会访问真实的空间,它是根据这个arr[3]这个类型来进行判断的
	//第四行类型跟第一行第二行第三行类型是一样的都是int[4]类型所以计算出来大小为16.
	return 0;
}

3.sizeof VS strlen

1.sizeof只关注占用内存空间的大小,单位是字节,不关心内存中存放的是什么
2.strlen是专门用来求字符串长度的,统计的是’\0’之前出现的字符个数,一定要找到’\0’才能结束,所以如果没有\0可能会存在越界访问问题
3.sizeof是操作符而strlen是库函数

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小陶来咯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值