C++ ,一个简单问题,求大牛。。。

[复制链接]
查看11 | 回复5 | 2013-5-30 17:14:58 | 显示全部楼层 |阅读模式
1. cout <<p输出的是p指向的地址cout <<&p是存储p的地址2. 对于p=0 C/C++中认为这是一种特殊的指针,称为空指针,这时不会取p指向内存的值,而是直接按0输出对于p=9 对于程序来说这是一个非法的地址,对于这种地址,如果输出*p一定会出错,如果只是输出p 就要看编译器了,有的会出错,有的会输出9...
回复

使用道具 举报

千问 | 2013-5-30 17:14:58 | 显示全部楼层
第一个问题:cout<<p;这个才是输出指针的地址。int *pp本身就是一直指针,那么你cout一个指针,自然输出的就是它的地址。而&p是引用,引用的是p指针所指的地址的内容,由于你没有初始化,所以。。。。。、第二个:p=0 就相当于 给p指针悬空等价于p=NULLp=9 是让p指向内存地址9,但是实际上9这个内存地址在内存中不存在,所...
回复

使用道具 举报

千问 | 2013-5-30 17:14:58 | 显示全部楼层
cout << &p是p的地址没错cout << p打印的是p指向的位置,你没有初始化是个随机值,也就是个野指针,垃圾值能赋值0是因为0可以理解成NULL指针, 不能赋值9是因为9是int型,而p是个int *类型, 你可以强转的方式骗过编译器,如p = (int *)9; 但是9这个地址在内存中不确定是否可操作,仅仅打印p的值倒没什么,会输出9...
回复

使用道具 举报

千问 | 2013-5-30 17:14:58 | 显示全部楼层
cout<<p;是输出指针所指的地址,cout<<&p; 是指指针所占用内存的地址,后面的0可以而9不行是因为指针只能用0,或者地址来初始化。...
回复

使用道具 举报

千问 | 2013-5-30 17:14:58 | 显示全部楼层
前一个代码,一开始定义了int *p;但是没有给它初始化,所以这个时候p指向随机的空间,cout<<p输出的是p所指向的空间的地址后面的代码,p = 0;是初始化,p指向为空,相当于null,只是0才有的,其他数字会报错...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行