A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© fersh 中级黑马   /  2015-8-12 23:32  /  1126 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

定义int *p1; p1 = NULL; int a = 5; *p1 = a; printf("%p",p1);输出结果是( )
A.NULL      B.a的地址        C.空指针错误           D.野指针错误

15 个回复

倒序浏览
应该选C吧
回复 使用道具 举报
选B,a的地址。首先从printf("%p",p1)中的%p就可以知道,此处输出的是一个地址,因为%p代表地址,如同%d是整形,%s是字符串一样。
为什么是a的地址呢?
int *p1;                     定义一个指针变量p1,p1只可以指向int类型的地址。
p1 = NULL;                定义指针为空,即不指向任何地址。
int a = 5;                    定义整形变量a 的值为5.
*p1 = a;                      使p1指向a,p1的值就是a的地址。
printf("%p",p1);             输出p1,即a的地址。
回复 使用道具 举报
本帖最后由 wangchao1992 于 2015-8-15 18:21 编辑
960743995 发表于 2015-8-15 17:49
选B,a的地址。首先从printf("%p",p1)中的%p就可以知道,此处输出的是一个地址,因为%p代表地址,如同%d是 ...

兄弟。*p1 = a;
是不是该写出     p1 = &a;?
回复 使用道具 举报
本帖最后由 wangchao1992 于 2015-8-15 18:21 编辑

应该是C  。 如果是B的话,应该这样写   p1 = &a;
回复 使用道具 举报
wangchao1992 发表于 2015-8-15 18:12
兄弟。*p1 = a;
是不是该写出     p1 = &a;?

p1 = &a是正确的。此处* 代表取值。所以*p = a;
回复 使用道具 举报
960743995 发表于 2015-8-15 20:02
p1 = &a是正确的。此处* 代表取值。所以*p = a;

*p 里的地址是空。 你给一个空地址赋值 没用的, 答案应该是  C
回复 使用道具 举报
C吧,肯定不是AB,因为运行的时候会出现访问错误。所以不是AB。
应该是C,前面P1赋值了NULL,就是没有内存空间。
没有内存空间你还给它赋值,所以应该是访问了不可访问的内存空间。所以错误了。
回复 使用道具 举报
chensc 金牌黑马 2015-8-16 07:47:05
9#
学习学习!
回复 使用道具 举报
wangchao1992 发表于 2015-8-15 18:12
兄弟。*p1 = a;
是不是该写出     p1 = &a;?

我的错了,谢谢指正,没看准题。
回复 使用道具 举报
本帖最后由 408205555 于 2015-8-16 19:43 编辑

选C。
p1先定义后初始化为NULL,证明它不是野指针。所以不是野指针的错误。
赋值为NULL说明它是空指针。
既然是空指针,内存就没有给他分配存储空间,
没有存储空间没法存值。所以是空指针错误。

如果是这样的就对了。
int *p1;
p1 = NULL;
int a = 5;
p1 = &a;*p1=10;
printf("*p1=%d",*p1);我把a的地址给指针了,那这个指针就有了地址,根据这个地址可以随便修改a的值。

点评

+1  发表于 2015-8-20 00:27
回复 使用道具 举报 1 0
运行一下看结果才是最实际的
回复 使用道具 举报
这里的*p1 = a;  是错误的语句,会内存出错的,这里真的不知道输出是什么,题目有问题,回答完毕。呃,,要选择的话,就是C了。
回复 使用道具 举报
应该是C  。 如果是B的话,应该这样写   p1 = &a;
回复 使用道具 举报
fersh 中级黑马 2015-8-22 21:28:21
15#
我记得,老师讲的是 野指针错误 ,难道我记错了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马