关于指向指针的指针的问题

bluesky_dgd 2002-07-23 11:11:46
int ival=1024,ival2=2048;
int *pi1=&ival,*pi2=&ival2,**pi3=0;
pi3=&pi2;
cout<<*pi3<<endl;
cout<<&pi3<<endl;
cout<<pi3<<endl;
编译运行均成功,
最后一句输出的代表什么意思?
另外:我用*pi3=&ival2在vc下编译可成功,
从字面上看*pi3=&ival2和上面的pi3=&pi2是一个意思,
但运行时总是报adress XXXXX cann't be read 一类的内存保护错误,是什么原因啊
...全文
26 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluesky_dgd 2002-07-25
  • 打赏
  • 举报
回复
a
bluesky_dgd 2002-07-25
  • 打赏
  • 举报
回复
不是NULL
dizzo 2002-07-25
  • 打赏
  • 举报
回复
to:bigjim(飞翔鸟)

"cout<<pi3<<endl;
//输出pi3的内容,NULL"

//pi3的内容是指针pi2的地址,不是NULL吧

bigjim 2002-07-24
  • 打赏
  • 举报
回复
int ival=1024,ival2=2048;
int *pi1=&ival,*pi2=&ival2,**pi3=0;
//此时pi1指向ival,pi2指向ival2,pi3为NULL

pi3=&pi2;
//pi3指向pi2,即*pi3 == pi2成立,*(*pi3) == ival2成立

cout<<*pi3<<endl;
//输出指针pi2,也就是ival2的地址

cout<<&pi3<<endl;
//输出pi3的地址

cout<<pi3<<endl;
//输出pi3的内容,NULL

从字面上看*pi3=&ival2和上面的pi3=&pi2是一个意思,
但运行时总是报adress XXXXX cann't be read 一类的内存保护错误,是什么原因啊
//pi3内容为空,*pi3就是访问了系统保护的地址,当然会被系统禁止
kwok_1980 2002-07-24
  • 打赏
  • 举报
回复
to: awinder(风)

*pi3=&ival与
pi2=&ival一样
//你所指的一样是什么意思,是**pi3和*pi2的值吧!???

to: bluesky_dgd (改革开放的副设计师)
'从字面上看*pi3=&ival2和上面的pi3=&pi2是一个意思,'->应该不是吧!错了!
//你是指**pi3的值吗?那就是相同!!!
lj0057 2002-07-23
  • 打赏
  • 举报
回复
在定义pi3时,pi3使用的是内存0地址,而且又向这块系统使用的内存赋值,这是很危险的一种做法,系统当然报错。
awinder 2002-07-23
  • 打赏
  • 举报
回复
pi3=&pi2;后
pi3指向pi2
*pi3=&ival与
pi2=&ival一样
若不加pi3=&pi2
pi3=0
*pi3等于改地址0处的内容,当然报错了
redleaves 2002-07-23
  • 打赏
  • 举报
回复
int *pi1=&ival,*pi2=&ival2,**pi3=0;
*pi3=&ival2;
这时pi3==0,*pi3也就是说0地址内存的值.0地址在WINDOWS系统中是不允许访问的,当然要出错.
但是,如果这么写
int *pi1=&ival,*pi2=&ival2,**pi3=&pi1;
*pi3=&ival2;
这样就不会出内存保护错误.因为pi3所指向的是一个有效的地址
但产生了一个更不易察觉的类型错误(如果编译器类型检查不严的话).
earthharp 2002-07-23
  • 打赏
  • 举报
回复
pi3=&pi2//正确
*pi3 = &pi2//不正确
指针类型不一致

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧