C++编程失乐园

致力于解决论坛的不足,探讨C++的原理

C++随笔 之 关于C++中的指针问题

原文出处
http://community.csdn.net/Expert/topic/5279/5279199.xml?temp=.2457392
在文章中大家在讨论一个问题:
如果没有存储上没有区别的话,请看下例:
float a=3.45;
int * p1=&a;
float * p2=&a;
cout<<"p1"<<"=>"<<*p1<<endl;
cout<<"p2"<<"=>"<<*p2<<endl;

结果是:
p1=>1107951616
p2=>3.45

书上的解释是:p1尽管与p2的地址相同,但它是整型指针,它总是访问该地址中的整型数。
首先在32位CPU上面,指针都是4位的,例如0xXX XX XX XX
那么既然指针是一样的,那么为什么指针类型不同的话,读出来的数据就变了样呢?
这是编译器的问题,例如我有个例子

char *p = 'c';
int *p1 = 10;
在32位机器上面
这里面p1是指向4字节的int变量,而p是指向1字节的char 变量
这样编译器在用p1变量的时候,会取0x XX XX XX XX后面的4个字节
而p变量,只会取0x XX XX XX XX后面的1个字节

因为本人现在在网吧里面[不知道大家有没有在网吧里面碰到装有c++编译器的计算机]
晚上我给大家一个例子,可以从其内存上面看的很清楚

posted on 2007-01-09 13:48 木木头 阅读(298) 评论(1)  编辑 收藏 引用 所属分类: C++特性

评论

# re: C++随笔 之 关于C++中的指针问题 2007-01-09 19:33 mumutou

#include <iostream.h>

void main()
{
char a='c';
char *pa = &a;
*(++pa) = 2;
*(++pa) = 0;
*(++pa) = 0;
*(++pa) = 0;
int *p1 = (int*)&a;
char *p2 = &a;
cout << "p1="<<*p2<<"\n";
cout << "p1="<<*p1<<endl;
}
p1指针取4个字节的数据
p2指针取1个字节的数据  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2006年12月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

统计

常用链接

留言簿(3)

随笔分类(29)

搜索

最新随笔

最新评论