int *p;p=0;是什么意思,该怎么理解

hywxn1 2014-04-12 06:45:10
如题,有如下语句,
int *p;
p=0;
该怎么理解,VS2013并不报错
...全文
13892 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
middzwb 2014-04-14
  • 打赏
  • 举报
回复
引用 4 楼 zxcvbnm0014 的回复:
看到前面的答复估计还是很迷糊吧,其实都没有说到重点。重点是,执行到int *p时,在栈上分配了一个四字节的内存。这段内存的数据类型是一个指针。执行p=0时,只是把这四个字节的数据置为0。所以本来就没有问题的语句,当然不会报错。如果想报错的话,就*p=0。这样的话要么编译不通过。要么程序退出。因为这样你就访问了地址为0x00000000的空间,而且试图修改它。但是那段空间是属于操作系统的,不能让你修改。所以就报错了。
未初始化的指针指向的地址不是随机指向的吗
middzwb 2014-04-14
  • 打赏
  • 举报
回复
指针赋值0 = nullptr,就是空指针
我看你有戏 2014-04-14
  • 打赏
  • 举报
回复
指针初始化吧
gonglaopi 2014-04-14
  • 打赏
  • 举报
回复
完全是为了移植性的,你可以理解为就是一个空指针
Johnblx 2014-04-14
  • 打赏
  • 举报
回复
引用 楼主 u014514014 的回复:
如题,有如下语句, int *p; p=0; 该怎么理解,VS2013并不报错
这种写法是为了移植的兼容性 毕竟NULL是一个宏 还有一些写法类似 int * p = (int *)0 void * p = (void *)0
下巴 2014-04-13
  • 打赏
  • 举报
回复
看到前面的答复估计还是很迷糊吧,其实都没有说到重点。重点是,执行到int *p时,在栈上分配了一个四字节的内存。这段内存的数据类型是一个指针。执行p=0时,只是把这四个字节的数据置为0。所以本来就没有问题的语句,当然不会报错。如果想报错的话,就*p=0。这样的话要么编译不通过。要么程序退出。因为这样你就访问了地址为0x00000000的空间,而且试图修改它。但是那段空间是属于操作系统的,不能让你修改。所以就报错了。
kuankuan_qiao 2014-04-12
  • 打赏
  • 举报
回复
指针为null 就表示指针不指向内存中任何地址 一般判断指针是否为null判断是否正确的赋值等
Morrisss_ 2014-04-12
  • 打赏
  • 举报
回复
指针赋值0和赋值NULL、nullptr差不多。
flyrack 2014-04-12
  • 打赏
  • 举报
回复
NULL == 0

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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