C++ 地址(指针)大小

小狮子 发布于 2013/11/23 21:15
阅读 1K+
收藏 1
#include <iostream>
using namespace std;
void main()
{
   double a=9.56900;
   double *p=&a;
   char b='a';
   char *q=&b;
   cout<<sizeof(&a)<<endl;
   cout<<sizeof(p)<<endl;
   cout<<sizeof(&b)<<endl;
   cout<<sizeof(q)<<endl;
}

输出结果为:4,4,4,4;

为什么涉及地址都是4,我用的是vc6.0!难道里面定义指针的大小了?

加载中
0
fey424
fey424

main 一般不返回void

指针变量存的是内存的地址

32位操作系统的内存的地址总线是32根,就是32个0101,也就是4个字节(32位)

小狮子
谢谢!我明白了!
0
newzai
newzai
指针大小和平台的CPU相关,16位CPU为2个字节,32位的CPU为4个字节,64位CPU为8字节,这是C语言最基础的知识。。
小狮子
谢谢!
0
此号作废
此号作废

void main

一看就是跟谭浩强大师学的

小狮子
你没有回答问题,不过还是谢了!
0
cut
cut
指针大小准确滴说跟你用的编译器直接相关,那个应该看编译器手册,什么平台环境只要编译器支持都可以,比如你用64位系统,而你用的编译器的设定的指针是32位的,那你用那个编译器写程序的时候指针也是32位的。一般指针在处理器处理器上面就一个间接寻址或者跳转,而有些处理器间接寻址空间是有设定的,跳转也分长短跳转,而且设置还有指令长度模式设定等等,而指针那个概念只会在高级语言里面的设定,具体是长跳转还是短跳转,寻址模式,使用指令长度模式等等设置都会在编译器里面搞,写程序的完全不关心而已。而原理上编译器在一个16位处理器弄个32位的指针是完全木有问题的,但木有实质的意义。
小狮子
非常感谢!~
0
小狮子

引用来自“cut”的答案

指针大小准确滴说跟你用的编译器直接相关,那个应该看编译器手册,什么平台环境只要编译器支持都可以,比如你用64位系统,而你用的编译器的设定的指针是32位的,那你用那个编译器写程序的时候指针也是32位的。一般指针在处理器处理器上面就一个间接寻址或者跳转,而有些处理器间接寻址空间是有设定的,跳转也分长短跳转,而且设置还有指令长度模式设定等等,而指针那个概念只会在高级语言里面的设定,具体是长跳转还是短跳转,寻址模式,使用指令长度模式等等设置都会在编译器里面搞,写程序的完全不关心而已。而原理上编译器在一个16位处理器弄个32位的指针是完全木有问题的,但木有实质的意义。
指针大小准确滴说跟你用的编译器直接相关,那个应该看编译器手册,什么平台环境只要编译器支持都可以,比如你用64位系统,而你用的编译器的设定的指针是32位的,那你用那个编译器写程序的时候指针也是32位的。一般指针在处理器处理器上面就一个间接寻址或者跳转,而有些处理器间接寻址空间是有设定的,跳转也分长短跳转,而且设置还有指令长度模式设定等等,而指针那个概念只会在高级语言里面的设定,具体是长跳转还是短跳转,寻址模式,使用指令长度模式等等设置都会在编译器里面搞,写程序的完全不关心而已。而原理上编译器在一个16位处理器弄个32位的指针是完全木有问题的,但木有实质的意义。
返回顶部
顶部