答案:一个指针在32位的计算机上,占4个字节;
        一个指针在64位的计算机上,占8个字节。

指针变量根据“基类型”的不同,有 int * 型,float * 型,double * 型,char * 型等。

一个int型变量占4个字节,那一个int型指针占几个字节啊,比如int *a,是占一个还是4个,跟这个指针的类型有关系吗?

指针可以看作一个普通的变量,只不过里面存的内容是一个地址而已。指针就是地址,地址就是指针。 而地址是内存单元的编号。所以,一个指针占几个字节,等于是一个地址的内存单元编号有多长。

并且指针类型要和指向的内容类型相同。如下图所示,定义了一个int型的c变量,然后定义一个int型的指针a指向c变量(指向可能不太好理解,实际上就是a把c的地址存起来了),那么这个这个指针是把 int c的第一个内存单元的地址存起来了呢,还是把int c的4个内存单元的地址都存起来了呢
答案是,不管这个指针是什么类型的,不管指针所指向的变量是什么类型的,都只存第一个内存单元的地址,所以指针的大小是固定的。

所有实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,对应指针的值的类型都是一样的,都是一个代表内存地址的长的十六进制数。具体是几个字节与计算机寻址位数,也就是内存地址长度有关,跟系统的寻址能力有关,譬如以前是16为地址,指针即为2个字节,32位机器是4字节,64位机器是8字节。

​​​​​​​

测试:

#include <stdio.h>
int main(void)
{int a=1;char b='a';float c=1.0;void *p;p=&a;printf("a的地址为:0x%x,其字节数为:%d\n",p,sizeof(p));p=&b;printf("b的地址为:0x%x,其字节数为:%d\n",p,sizeof(p));p=&c;printf("c的地址为:0x%x,其字节数为:%d\n",p,sizeof(p));return 0;
}

下面是在Dev-C++ 5.11中测试的结果(编译器是gcc):

a的地址为:0x62fe14,其字节数为:8
b的地址为:0x62fe13,其字节数为:8
c的地址为:0x62fe0c,其字节数为:8

下面是在VxWorks5.5的IDEtornado2.2中的测试情况(编译器是SIMNTgnu):

(该编译器不支持中文,所有把中文删掉了)

a address 0x3889238,bytes:4
b address 0x3889237,bytes:4
c address 0x3889230,bytes:4

可以看出在电脑上的Dev-C++ 5.11上,指针占用8个字节了,说明是64位系统,寻址能力(地址总线、和地址相关的寄存器也是64位)。

而VxWorks5.5的IDE tornado2.2中,因为是在嵌入式系统中,是32位系统,所以指针占用4个字节。

在计算机中,CPU不能直接与硬盘进行数据交换,CPU只能直接跟内存进行数据交换。而CPU是通过地址总线、数据总线、控制总线三条线与内存进行数据传输与操作。

问:假如,我们想通过CPU在内存中读取一个数字3,那么是怎样一个操作呢?
首先,CPU通过地址总线,在内存中找到数字3的地址;
然后,通过控制总线知道该操作是读还是写;
最后,通过数据总线,把数字3传输到CPU中。

我们可知道:
地址总线的宽度决定了CPU的寻址能力;
控制总线决定了CPU对其他控件的控制能力以及控制方式。
数据总线的宽度决定了CPU单次数据传输的传送量,也就是数据传输速度;

这是几种总线的类型以及简单功能。

我们平时所说的计算机是64位、32位、16位,指的是计算机CPU中通用寄存器一次性处理、传输、暂时存储的信息的最大长度。即CPU在单位时间内(同一时间)能一次处理的二进制数的位数。
假如,某计算机的地址总线是32位,那么其一次可以处理的信息是32条,每一条地址总线有0或1两种可能,那么32根地址总线一共有232种可能,也就是其描述的地址空间为0x0000 0000 0000 0000 ~ 232-1。
我们一般需要32个0或1的组合就可以找到内存中所有的地址,而32个0或1的组合,就是32个位,也就是4个字节的大小,因此,我们只需要4个字节就可以找到所有的数据。所以,在32位的计算机中,指针占4个字节。同理,在64位的计算机中,指针占8个字节。

同时也可以看出,由于地址总线为32,那么每次寻址的空间为0x0000 0000 0000 0000 ~ 232-1,那么CPU的最大内存为232Byte=222KB=212MB=22GB=4GB。
而64位,最大内存是264Byte。

更多学习关于指针变量占几个字节,请参考郝斌老师的C语言第P139集

看完视频的同学,可以看到老师讲的是:一个指针变量占几个字节
指针变量里面存放的是:某一类型的数据的第一个地址值。
也就是地址值占几个字节,指针变量就占几个字节
因此,
一个指针占几个字节
一个地址占几个字节
一个指针变量占几个字节
三种问法等同
不过,严谨些说,该题目改为 一个指针变量占几个字节 更为贴切些

举个例子
内存地址就像一条路上的门牌号,用几位表示需要看门牌数量。
门牌号从0号开始编排,到232-1号结束,一共就有232个门牌号。分别为二进制的
000000000000000000000000000号
000000000000000000000000001号
000000000000000000000000010号
最后
111111111111111111111111110号
111111111111111111111111111号
每个门牌的号码是32位(二进制),一个字节为8位,32位就是4字节。

原创地址:

(77条消息) C语言—— 一个指针变量占多少个字节_六神max的博客-CSDN博客

(77条消息) 一个int型指针占几个字节,跟指针的类型有关系吗?(2020.11)_我是你的橙子啊的博客-CSDN博客_int指针占几个字节

(77条消息) 一个指针占几个字节?原理是什么呢?_AsiaSun.的博客-CSDN博客_指针占几个字节

C/C++中一个int型指针占几个字节?相关推荐

  1. 一个int型指针占几个字节,跟指针的类型有关系吗?(2020.11)

    由于这两天看的数据结构都跟C语言相关,这2天的代码中都遇到了指针的问题,所以今天就看了一些关于指针的博客,然后突然想到一个问题,一个int型的指针占几个字节. 一个int型变量占4个字节,那一个int ...

  2. 一个int类型到底占多少个字节

    一个int占多少个字节? 这个问题我们往往得到的答案是4. 但是int到底占多少个字节,却跟你的机器环境有关. As you can see, the typical data type sizes ...

  3. 一个int和long占多少个字节

    一个int占多少个字节? 这个问题我们往往得到的答案是4. 但是int到底占多少个字节,却跟你的机器环境有关. [html] view plain copy print ? As you can se ...

  4. 一个int类型到底占多少个字节?

    一个int占多少个字节? 这个问题我们往往得到的答案是4. 但是int到底占多少个字节,却跟你的机器环境有关. [html] view plaincopy print? As you can see, ...

  5. 设c语言中 一个int型数据库,最新真实全国二级C选择题真题第1套

    1.下列叙述中正确的是 A.循环队列是顺序存储结构 B.循环队列是链式存储结构 C.循环队列是非线性结构 D.循环队列的插入运算不会发生溢出现象 2.下列叙述中正确的是 A.所有数据结构必须有根结点 ...

  6. int型变量占多少个字节?

    引自 http://topic.csdn.net/t/20010521/10/128376.html int型变量有时候占4个字节(在Win32),有时候占2个字节(在DOS)   这个int类型的大 ...

  7. java---编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得。

    题目: 编写一个方法,返回一个int型的二维数组,数组中的元素通过解析字符串参数获得,字符串如下"1,2:3,4,5:6,7"对应的数组为: d[0][0]=1 d[0][1]=2 ...

  8. int 几个字节 python_Python中一个int类型占了几个字节

    Python中一个int类型占了几个字节 发布时间:2020-07-17 11:36:34 来源:亿速云 阅读:117 作者:清晨 小编给大家分享一下Python中一个int类型占了几个字节,希望大家 ...

  9. C语言中int占几个字节,指针占几个字节,由什么决定呢?

    int占几个字节 今天心血来潮,想要了解一下C语言中各整型占用几个字节. 先上代码测试两个环境: #include<stdio.h> #include<stdlib.h>int ...

最新文章

  1. 苹果被罚3.1635亿元,因不愿开放第三方支付!
  2. mysql函数GROUP_CONCAT,Cast,convert
  3. python websocet回调_python – 线程,非阻塞websocket客户端
  4. C#趣味程序----分数之和
  5. 如何配置一个最基本的web富文本编辑器?--之wangEditor(验证成功)
  6. private-bower
  7. robotframework的学习笔记(十六)----robotframework标准库String
  8. 思科华为双向的chap
  9. source insight 导入JDK源码
  10. 基于opencv的车牌号码识别 必备基础知识
  11. 查看数据库实例名的方法:
  12. 通过Redis入侵服务器
  13. java设计模式三个模式结合_Java设计模式——责任链(结合Tomcat中Filter机制)
  14. Bugku杂项——旋转跳跃
  15. 最强的手机文件管理器!
  16. 打乱mysql数据顺序_打乱数据库表内的数据顺序
  17. 刘彬20000词汇10
  18. 浏览器主页被2345拦截
  19. docker+selenium+node-chrome-debug(node-firefox-debug)完成自动化测试环境的部署
  20. [h5py] 解决ImportError: libhdf5.so.103: cannot open shared object file: No such file or directory

热门文章

  1. 【安装】Windows 安装 Redis 以及 Redis管理工具
  2. 武汉能力评估CS认证申报需知
  3. Golang 端口复用测试
  4. linux重用端口号,linux下 端口复用的问题
  5. FPGA程序如何模块化设计?
  6. 2014Matlab最小二乘拟合函数,怎样输出matlab最小二乘拟合曲线的表达式
  7. 网络安全入门,要掌握的重点基础帮你划好了!
  8. c++ - 第18节 - 哈希
  9. Linux学习-30-chgrp、chown等修改文件和目录的所有者和所属组命令
  10. 可以隐藏相册的app