C语言的指针大小问题
2016-01-17 16:28
399 查看
一说到指针的大小很多人都会想到int型,char型,double型,然后觉得不同类型的指针所占内存大小不同,其实这是一种误区.
因为指针其实就是一个无符号整形,一个整数而已,它的大小取决于你的系统是16 32 还是64位的 16/8=2byte 32/8=4byte 64/8=8byte .
但是你会问为什么我的系统是64位的,但是我的指针却是32位的4字节指针.这个也很简单解释,因为我们是用编译器来写代码的,编译器已经默认我们的程序是在32位系统下运行,所以我们在编译器当中看到的指针都是占4个字节.
有人又会问,为什么不用64位来编译呢?因为我们的程序要兼容32位的机器啊!你以为每个人都用64位的机器吗??
讨论完指针大小问题,我们再讨论一下指针所指向的内存块所占内存大小.地球人 都知道char占一个字节,int占2个字节,double占4个字节,long double占8个字节(这是默认的32位编译环境下,在64位下翻倍就是了),所以一个char指针所占内存为4个字节(32位下),所指向的内存区域占1个字节.同理其它类型也是一样的,
最后附两张图:
32位下
64位下
因为指针其实就是一个无符号整形,一个整数而已,它的大小取决于你的系统是16 32 还是64位的 16/8=2byte 32/8=4byte 64/8=8byte .
但是你会问为什么我的系统是64位的,但是我的指针却是32位的4字节指针.这个也很简单解释,因为我们是用编译器来写代码的,编译器已经默认我们的程序是在32位系统下运行,所以我们在编译器当中看到的指针都是占4个字节.
有人又会问,为什么不用64位来编译呢?因为我们的程序要兼容32位的机器啊!你以为每个人都用64位的机器吗??
讨论完指针大小问题,我们再讨论一下指针所指向的内存块所占内存大小.地球人 都知道char占一个字节,int占2个字节,double占4个字节,long double占8个字节(这是默认的32位编译环境下,在64位下翻倍就是了),所以一个char指针所占内存为4个字节(32位下),所指向的内存区域占1个字节.同理其它类型也是一样的,
最后附两张图:
32位下
64位下
相关文章推荐
- 【C/C++】结构体和联合体的区别
- 基于一致性hash算法 C++语言的实现详解
- C#与C++区别(转)
- C语言中 v...printf类函数的用法
- c++中使用new动态分配存储空间
- C++操作文本
- 《C语言及程序设计初步》第36讲实践项目
- C++实现 复数类
- 详解C指针
- C++:模板与泛型编程
- 在RHEL上安装Thrift(支持C++)的若干问题
- c/c++ 文件操作相关的常用函数
- C语言实现银行家算法
- C语言的atan()和atan2()函数
- C++小题(十五)
- C语言-纸牌计算24点小游戏
- C++ 学习笔记(一些新特性总结 2)
- C++ 学习笔记(一些新特性总结 2)
- 《Effective Modern C++》翻译--条款4:了解如何查看推导出的类型
- 《Effective Modern C++》翻译--条款4:了解如何查看推导出的类型