黑马程序员技术交流社区

标题: 求详细解答 [打印本页]

作者: fersh    时间: 2015-8-12 23:32
标题: 求详细解答
定义int *p1; p1 = NULL; int a = 5; *p1 = a; printf("%p",p1);输出结果是( )
A.NULL      B.a的地址        C.空指针错误           D.野指针错误


作者: yushimin763    时间: 2015-8-14 11:14
应该选C吧
作者: 960743995    时间: 2015-8-15 17:49
选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:12
本帖最后由 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:14
本帖最后由 wangchao1992 于 2015-8-15 18:21 编辑

应该是C  。 如果是B的话,应该这样写   p1 = &a;
作者: 960743995    时间: 2015-8-15 20:02
wangchao1992 发表于 2015-8-15 18:12
兄弟。*p1 = a;
是不是该写出     p1 = &a;?

p1 = &a是正确的。此处* 代表取值。所以*p = a;
作者: wangchao1992    时间: 2015-8-15 21:31
960743995 发表于 2015-8-15 20:02
p1 = &a是正确的。此处* 代表取值。所以*p = a;

*p 里的地址是空。 你给一个空地址赋值 没用的, 答案应该是  C
作者: 庐山烟雨浙江潮    时间: 2015-8-16 00:29
C吧,肯定不是AB,因为运行的时候会出现访问错误。所以不是AB。
应该是C,前面P1赋值了NULL,就是没有内存空间。
没有内存空间你还给它赋值,所以应该是访问了不可访问的内存空间。所以错误了。
作者: chensc    时间: 2015-8-16 07:47
学习学习!
作者: 960743995    时间: 2015-8-16 19:22
wangchao1992 发表于 2015-8-15 18:12
兄弟。*p1 = a;
是不是该写出     p1 = &a;?

我的错了,谢谢指正,没看准题。
作者: 408205555    时间: 2015-8-16 19:40
本帖最后由 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的值。


作者: tangbinbin    时间: 2015-8-18 20:36
运行一下看结果才是最实际的
作者: 第一梦    时间: 2015-8-18 22:31
这里的*p1 = a;  是错误的语句,会内存出错的,这里真的不知道输出是什么,题目有问题,回答完毕。呃,,要选择的话,就是C了。
作者: 企业部-阿狗老师    时间: 2015-8-19 17:58
应该是C  。 如果是B的话,应该这样写   p1 = &a;
作者: fersh    时间: 2015-8-22 21:28
我记得,老师讲的是 野指针错误 ,难道我记错了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2