(C/C++学习)23.C++中指针的长度
引言:先看下面一个程序会打印出什么?
#include<iostream>
using namespace std;
int main()
{
int a = 2; int *p = &a;
double b = 1; double *q = &b;
float c = 3; float *l = &c;
char d = 's'; char *s = &d; cout << sizeof(a) << "" <<sizeof(p) << endl;
cout << sizeof(b) << "" << sizeof(q) << endl;
cout << sizeof(c) << "" << sizeof(l) << endl;
cout << sizeof(d) << "" << sizeof(s) << endl;
return 0;
}
64 位Linux 下测试结果:
4 8
8 8
4 8
1 8
64 位Windows下测试结果:
4 4
8 4
4 4
1 4
好奇的人可以自己去测试结果,这里留点悬念!我只告诉你不同的电脑、不同的编译器都有可能得出不一样的结果。为什么呢?请往下看:
首先:
1. 操作系统有32/64位之分,但同时CPU也有32/64位之分(Windows 在cmd终端下用 systeminfo 命令可以查看自己的操作系统以及cpu位数);
2. 32位CPU只能安装32位系统,64位CPU可以安装32位操作系统,也可以安装64位操作系统;
3. 一般来说,在64位系统下,指针长度为8,32位系统下,指针长度位4;但是有的编译器为了不同的操作系统之间相互兼容,内部对指针进行了包装,使得不管在64位还是32位系统下,指针都是4个字节长度。
4. 64位系统,这个位数指的是CPU里面的通用寄存器的数据宽度为64位,也就是说一个地址占二进制位数是64,而指针其实是一个地址,所以:
sizeof(double *)==sizeof(int *)==sizeof(char *)==64/8==8
这里除以8是因为,我们用sizeof()计算的是某个数据类型所占的字节个数,用此字节个数来表示这个数据类型的大小 ,而我们都知道,一个字节所占的二进制位为8位,因此才除以8.
5. 32位系统,同理,一个地址占32位二进制空间,sizeof(double *)==sizeof(int *)==sizeof(char *)==32/8==4
注意:地址艮系统的位数有关,但是基本的数据类型所占字节数(大小)是由C语言本身决定的,如:int 就只占4个字节,char 就只占一个字节,与系统无关。
(C/C++学习)23.C++中指针的长度的更多相关文章
- Python学习-23.Python中的函数——isinstance
在Python中可以使用isinstance函数来判断某个值或变量是否为某个类型. 例子: print(isinstance(1,int)) print(isinstance(1,float)) pr ...
- 《挑战30天C++入门极限》c++中指针学习的两个绝好例子
c/c++中指针学习的两个绝好例子 对于众多人提出的c/c++中指针难学的问题做个总结: 指针学习不好关键是概念不清造成的,说的简单点就是书没有认真看,指针的学习犹如人在学习饶口令不多看多学多 ...
- VC++学习之VC中常见问题
VC++学习之VC中常见问题 (1)为什么某个类突然在工作区间里面突然看不见了? 只是类隐藏了,打开FILEVIEW,找到隐藏类的头文件,随便敲一下键盘的空格键,类就会在CLASSVIEW中显示了 ( ...
- C语言学习004:数组与指针
在C语言中,字符串实际上就是字符数组,在内存中字符串"Shatner"存储的形式是这样的
- C++中指针常量和常量指针的区别
在C++学习使用过程中,每个人都不可避免地使用指针,而且都或多或少的接触过常量指针或指针常量,但是对这两个的概念还是很容易搞糊涂的. 本文即是简单描述指针常量和常量指针的区别. 常量指针 定义: 又叫 ...
- Keil C51 中指针的使用
指针是C语言中比较难的一个内容,Keil C51在指针方面有和标准C不一样的地方,今天看了一些资料学习了一下Keil C51 中指针的使用. keil51的指针,包含两种指针:普通指针,兼容标准C:内 ...
- Javascript学习1 - Javascript中的类型对象
原文:Javascript学习1 - Javascript中的类型对象 1.1关于Numbers对象. 常用的方法:number.toString() 不用具体介绍,把数字转换为字符串,相应的还有一个 ...
- C中指针符*和取址符&
学习了C语言之后,关于指针部分看了无数遍,有时候明明觉得自己看懂了,指针就是地址,但是总是在看代码时候糊里糊涂的搞不明白,最近又关于指针强化了一把. 大部分情况下对于程序中指针糊涂是因为不明白指针符“ ...
- 【AI in 美团】深度学习在OCR中的应用
AI(人工智能)技术已经广泛应用于美团的众多业务,从美团App到大众点评App,从外卖到打车出行,从旅游到婚庆亲子,美团数百名最优秀的算法工程师正致力于将AI技术应用于搜索.推荐.广告.风控.智能调度 ...
随机推荐
- 【转】Material Design 折叠效果 Toolbar CollapsingToolbarLayout AppBarLayout
我非常喜欢Material Design里折叠工具栏的效果,bilibili Android客户端视频详情页就是采用的这种设计.这篇文章的第二部分我们就通过简单的模仿bilibili视频详情页的实现来 ...
- 简述Python中的break和continue的区别
众所周知在Python中,break是结束整个循环体,而continue则是结束本次循环再继续循环. 但是作为一个新手的你,还是不明白它们的区别,这里用一个生动的例子说明它们的区别,如下: 1.con ...
- 学生表、课程表、 成绩表 、教师表sql练习
转自:http://yuncode.net/code/c_58df7a8ca687e58 1.查询“1”课程比“2”课程成绩高的所有学生的学号: SELECT t1.student_id FROM ...
- Objective-C程序
创建: 2018/01/17 完成: 2018/01/19 对象(object)与信息 信息式 声明实例变量 id obj; 向对象变量发送信息 [obj msg] //这就是信息式 例: [ ...
- 使用Gitalk实现静态页面评论的功能
使用静态页面的理由 本人在Github上使用github.io部署了一个静态主页,地址是http://aopstudio.github.io,用于存放一些笔记文件.虽然静态页面功能少,自动化程度低,不 ...
- typescript进阶篇之高级类型与条件类型(Readonly, Partial, Pick, Record)
本文所有东西尽可在 typescript 官网文档寻找,但是深浅不一 高级类型 lib 库中的五个高级类型 以下所有例子皆以 person 为例 interface Person { name: st ...
- eccharts-gl 3D立体柱状图
echarts-gl继承于echarts echarts-gl官方实例https://echarts.baidu.com/examples/index.html#chart-type-globe 代码 ...
- vue中sync,v-model----双向数据绑定
需求:父子组件同步数据 实现方式:sync或者v-model 一.sync 官网:https://cn.vuejs.org/v2/guide/components-custom-events.html ...
- .Net MVC之间的关系以及如何运用
.Net MVC组成部分:视图(views)模型(model)控制器(controller)以及路由(RouteConfig),视图跟模型的数据不进行直接的交互,他们是通过控制器进行视图模型之间的数据 ...
- 从 C++ 到 Objective-C 的快速指南
简介 当我开始为iOS写代码的时候,我意识到,作为一个C++开发者,我必须花费更多的时间来弄清楚Objective-C中怪异的东西.这就是一个帮助C++专家的快速指南,能够使他们快速的掌握Apple的 ...