C语言中关于指针的字节问题

charch=‘A’;char*p=&ch;sizeof(p)=4;一个指针变量,无论他指向的变量占几个字节该指针变量本身只占4个字节一个变量的地址使用该变量首字节的地址... char ch=‘A’;
char *p=&ch;
sizeof(p)=4;
一个指针变量,无论他指向的变量占几个字节该指针变量本身只占4个字节
一个变量的地址使用该变量首字节的地址来表示。
我想请问 一个字节占8位,为什么要用32位(即4个字节)来表示呢。8位都可以把这个状态表示完全了呀
展开
 我来答
infyzm
推荐于2016-10-12 · TA获得超过153个赞
知道答主
回答量:21
采纳率:0%
帮助的人:30.8万
展开全部

    提问者的理解稍微有一点误区。指针了类型是4个字节(32位),没错,当然这和系统有关,暂不讨论这个问题。int类型我们也按照4个字节来看待。

    图中p是一个指针类型的变量,a是一个整型的变量,他们所占的空间都是4个字节,是方框表示的大小。但是提问者的误区在这里,指针变量里面存放的是什么?虽然它是一个指向int变量的指针,但它存放的不是int变量,而是整形变量的地址0008!(记住指针变量存放的是变量的地址,而不是变量本身,所以指针变量p的空间大小和指针变量指向的内容a的空间大小没关系,和你所使用的系统的地址空间有关)

这样就有出现了一个问题,我也不知道指针变量要给多大才够啊,四个字节够吗?怎么判断指针类型的大小够不够呢?这和系统相关,语言设定的指针变量的空间的位数要能够足够表示内存地址的个数。

    举个例子,假设你的内存是512字节的,就是512的地址需要区分(小了点,解释方便)。那么也就是说你的内存是从0到511(0000 0000 - 1111 1111)(以下说明为了简单,不考虑复杂的寻址方式,也不区分片内地址,看不懂可以略过,主要是怕有人产生疑惑,假设寻址的时候地址和物理地址是一一对应的关系)。如果你说指针变量为1位,那么你觉得可以吗?1为只有0和1两种状态,只能表示两个地址其他510个呢,怎么能表示512个地址呢!4位,很显然只能表示16个地址(0-15)。

    因此,你提问中的指针变量为什么要用32位,这和一个字节是8位没有关系,要看你内存的地址空间有多大,最少指针变量的空间要能够表示整个地址空间。假如未来内存变得很大很大,现在的32也不一定够用。

    上面举得那个512字节的地址的例子,可能有人会自己去算去,我的内存是1G,2G,4G,那么我的指针变量为什么也是四个字节呢?我只能说一定是够的,只不过像我刚才声明的那样,计算机的实际的寻址方式并不是我们想象的那么简单,并不是单纯的一对一的关系,涉及到片选和片内地址的为问题,二者是不同的,如果想学习的话,可以看下计算机组成原理方面的书籍。

李示羊
2013-05-04 · TA获得超过1053个赞
知道小有建树答主
回答量:291
采纳率:0%
帮助的人:368万
展开全部
指针变量的值是一个地址, 在32位的系统中, 地址用32位来表示, 所以指针永远都是32位 (仅限于32位的系统)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式