指针大小为什么与类型无关?

因为它的大小与硬件有很大关系。

相信这个问题很多像我一样的新人都不知道。我们的内存中有各种各样的数据,整型、浮点型、字符型等等。这些数据在内存中占据不同大小的储存空间,故用sizeof运算符(注:sizeof是种运算符而不是函数,它在编译时发挥作用)进行运算时结果是不同的。然而不同类型的指针在相同系统环境下进行这种运算时结果却是相同的。为什么呢?

众所周知,C语言中的指针描述的是内存中的地址。而内存地址这种东西则是由CPU进行编址的。对于一个4位的CPU来讲,它能同时输出的数据为4位,即0000-1111共2^4 种情况,故这些二进制数字只能对应到16个位置的内存地址,即CPU仅能识别出16个内存地址。即便你的内存再大,它也显示只有16个位置的内存可用。这种原理同样应用于32位和64位的CPU。

32位的CPU能同时呈现32个位的数据,故有2^32 种情况,对应到2^32 个内存位置也就是最大3.85GB大小,因此32位的系统只能支持最大4GB的内存。相比之下,64位的CPU能同时吞吐2^64 位的数据,这显然能够对应到2^64 个内存的地址,而理论上这个大小换算成10进制则是相当大的数,如果对应到内存,此时一个很大的内存。所以我们说64位系统理论支持无穷大内存(这里的无穷大只是一种概念,因为我们不可能用到如此巨大容量的内存)。

综上,因为指针存放的是地址,所以32位内存,共4个字节;64位系统的64位地址共8个字节——你应该明白什么了吧!没错,32位指针4字节,64位指针8字节。

当然,CPU只是影响指针大小的首要因素,除了它之外还要看操作系统和编译器的位数。这里指针的大小由这三个东西中位数最小的那项决定。比如,如果CPU、系统都是64位的,但编译器是32位的,那么很显然指针只能是32位4字节大小。

指针大小为什么与类型无关?相关推荐

  1. C++ Primer 5th笔记(chap 16 模板和泛型编程)类型无关和模板编译

    1. 编写类型无关的代码 泛型代码的两个重要原则: 模板中的函数参数是const的引用. 函数体中的条件判断仅使用<比较运算. 大多数类型,包括内置类型和我们已经用过的标准库类型(除unique ...

  2. 【二级指针--定义、初始化赋值、解引用;特殊指针--空指针、void类型的指针】(学习笔记12--指针下)

    目录 一.二级指针 指针的指针 二级指针的定义 二级指针的初始化与赋值 二级指针的解引用 二级指针与指针数组 main函数的参数 二.特殊指针 空指针 void类型的指针 新星计划第六篇博文,下面是上 ...

  3. 万能指针 和 指针大小与指针步长的区别

    //void,无返回值, 无参数函数修饰//void a; //err, void是无类型,无法确定真正的类型void * p; //ok, 指针的大小是固定,和编译器有关int a = 10;p = ...

  4. R语言ggplot2可视化指定图像标题(title)、副标题(subtitle)的内容、字体大小、字体类型、色彩、对齐方式等实战

    R语言ggplot2可视化指定图像标题(title).副标题(subtitle)的内容.字体大小.字体类型.色彩.对齐方式等实战 目录

  5. 【C 语言】数组 ( 数组指针 | 数组指针定义 | 使用 数组类型* 定义数组指针 )

    文章目录 总结 一.使用 数组类型* 定义数组指针 二.完整代码示例 总结 typedef int(ArrayType)[3];ArrayType *p = NULL; 一.使用 数组类型* 定义数组 ...

  6. python设置坐标轴刻度值字体大小_python 设置xlabel,ylabel 坐标轴字体大小,字体类型...

    本文介绍了python 设置xlabel,ylabel 坐标轴字体大小,字体类型,分享给大家,具体如下: #--coding:utf-8-- import matplotlib.pyplot as p ...

  7. 怎么更改Windows11鼠标指针大小和样式

    怎么更改Windows11鼠标指针大小和样式?如果您的鼠标光标太难看,Windows11提供了几种使其脱颖而出的方法.您可以使鼠标指针变大.反转或更改其颜色.下面小编为您大家带来操作方法介绍! 更改W ...

  8. 指针的类型和指针所指向的类型

    从语法角度看,只要把指针声明语句里的指针名字去掉,剩下的部分就是这个指针的类型,这是指针本身所具有的类型. int *ptr;    int* char *ptr;   char* int **ptr ...

  9. 【已解决】-Mac/Mac mini/Macbook上修改鼠标指针大小

    问题: MacOS默认的鼠标指针太小了,平时很容易找不到在哪里. 解决办法: 在 Mac 上,点击苹果菜单 >"系统偏好设置",然后点按"辅助功能" . ...

最新文章

  1. Dojo入门:DOM操作
  2. CAMB, CosmoMC的安装和使用
  3. c语言while退出无限循环,请教:为什么我用while(!feof(fp))时会出现无限循环????...
  4. Comparable和Comparator的区别
  5. NOI Linux2.0使用系列视频集
  6. 如何提高lstm的预测精度_如何提高失重秤的喂料精度?你需要了解这些!
  7. servlet ---- 响应对象
  8. android studio 便携式wlan热点 网络名称_速存 | WLAN信号增强器
  9. python中matplotlib 的简单使用
  10. Hibernate实体对象的生命周期(三种状态详解)
  11. 基于RFID技术的智能交通解决方案
  12. 内网渗透篇-信息收集
  13. IT6801FN中文版
  14. html阅读是什意思,HTML是什么意思?什么是HTML5?什么是H5? | 前端面试题
  15. 论文解读 | CenterNet:Keypoint Triplets for Object Detection
  16. 服务器中temp文件夹在哪,WIN7中出现TEMP用户文件夹,临时账户登录
  17. JAVA前端————HTML—W3C—基本标签—超链接锚链接
  18. AWS的十条军规: 过去十年的经验总结
  19. Tomcat 提示 -Djava.endorsed.dirs=/Users/admin/apache-tomcat-9.0.13/endorsed is not supported. Endorsed
  20. php 数字转大写人民币

热门文章

  1. SAP License:ERP失败案例集
  2. Elasticsearch 实战1:ES 项目实战(一)Java 集成 Spring Data Elasticsearch(一):简介及环境搭建
  3. Axure高保真智慧消防远程监管系统数据可视化大屏看板+web端高保真大数据分析平台看板+大数据交换配置管理平台大屏动态可视化看板
  4. BZOJ 1444 [JSOI2009]有趣的游戏 (Trie图/AC自动机+矩阵求逆)
  5. ubuntu 16.04 安装最新的 docker
  6. css3 Gradient 背景渐变
  7. 百度地图上的标注物太多导致界面卡顿的解决办法
  8. python 查找IP地址归属地
  9. 模板 manacher算法
  10. scala (2) while 和变量