【无标题】

关于计算指针的大小的一道笔试题,他问的是程序输出的结果是多少?,源程序如下:

#include <stdio.h>
int main()
{
	char * str="hello";
	printf("%d\n",sizeof(str));
	return 0;
}

乍一看,这结果不就是6吗,因为“hello”,包含5个字符,外加一个‘\0’,但这么想真就对吗?为了验证结果,我们首先在64为操作系统下,运行一下,结果如下:
在这里插入图片描述
纳尼?怎么可能?先不要着急,我们先一步一步来剖析,首先关于关键字sizeof,他指的是变量所占空间大小,那么问题来了,str所占用的空间,是整个字符串的大小,还是其他的呢?换句话说,
str指向的是“hello”整个字符串,还是指向的是字符串的开始?
正确答案是,str指向字符串的第一个字符。那么你肯定会说,那答案也应该是1!不应该是8。不要心急,问你一个问题,sizeof(char) 和sizeof(char*)大小一样吗?
在这里插入图片描述
答案是不一样的,那为什么大小还不一样呢?
1、不同系统下数据类型的字节大小
32位系统和64位系统的区别在于long 和指针
在这里插入图片描述
其中,彩色部分代表的意思是该类型在三种平台下所占字节大小不同,黑色说明所占字节数相同!

参考链接:https://blog.csdn.net/zy47675676/article/details/91474604

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值