注册 登录
编程论坛 C++教室

指针初始化为0的怪现象如何解释?

lixang 发布于 2007-08-03 13:20, 1880 次点击
#include<iostream>
using namespace std;

int main()
{
int * a=0; int * b=0;
*a=10; * b=20;
cout<<*a<<" "<<*b<<endl;
return 0;
}
指针初始化为0的怪现象如何解释
对于这个程序?

请解释此现象指针初始化为0实质所在?


14 回复
#2
alleks2007-08-03 13:30

应该就是初始化为空指针NULL吧

#3
leeco2007-08-03 14:41

有什么怪现象?

#4
不以物喜2007-08-03 17:08

a ,b 在栈中,并未分配空间,正确代码 如下:
#include<iostream>
using namespace std;

int main()
{
int * a=0;
int * b=0;
a=new int;
*a=10;
b=new int;
*b=20;
cout<<*a<<" "<<*b<<endl;
return 0;
}

#5
百年不亮2007-08-03 17:13
空指针赋值,严重的错误!
#6
aipb20072007-08-03 17:28
空指针表示没有保存任何关联地址。
对一个0x0的地址解引用是为定义行为,所以赋值错误。

[此贴子已经被作者于2007-8-3 17:28:59编辑过]

#7
不以物喜2007-08-03 17:28

同意五楼的

#8
lixang2007-08-03 21:56

a ,b 在栈中,并未分配空间,正确代码 如下:
#include<iostream>
using namespace std;

int main()
{
int * a=0; //nt * a=0与int A=0; (a ,A )在栈中的区别如何呢????????????
int * b=0;
a=new int;
*a=10;
b=new int;
*b=20;
cout<<*a<<" "<<*b<<endl;
return 0;
}
#9
不以物喜2007-08-04 19:44
存的都是0,但一个是地址,一个是数据
至于到底是地址还是数据,由“*“区分
我认为是这样。。。。
#10
blueboy820062007-08-04 20:09
int *a=0 //是声明一个NULL的指针,0的意义不是赋值,是让其指向空的地址,这种方式是为防止此指针的误用.
int a=0 //就是一般的声明和赋初值.
要特别注意5&6楼说的问题啊

[此贴子已经被作者于2007-8-4 20:10:47编辑过]

#11
野比2007-08-05 18:45

这样的.. 指针指向的是地址..
在 冯-诺依曼结构(PC)的计算机中, 程序指令空间和数据空间是共用的..
从内存地址0开始的低端空间通常是中断向量表..
0中断指向的是最高段的中断..通常是"关机"...

#12
圆圆的鸟蛋2007-08-06 12:56
在声明指针的时候:int *a = 0 ;
*号只是说明a是指针而不是一般的变量,这时,*不是取值运算符!!
#13
lndy2007-08-08 11:29
以下是引用不以物喜在2007-8-3 17:08:41的发言:

a ,b 在栈中,并未分配空间,正确代码 如下:
#include<iostream>
using namespace std;

int main()
{
int * a=0;
int * b=0;
a=new int;
*a=10;
b=new int;
*b=20;
cout<<*a<<" "<<*b<<endl;
delete a;//释放a指向的内存空间
delete b;//释放b指向的内存空间
return 0;
}

#14
jonc2007-11-02 18:08

对啊
空指针付值错误

#15
六道2007-11-03 00:28

确实是个要注意的地方~~

1