黑马程序员技术交流社区

标题: 关于指针的一道题 [打印本页]

作者: jingkai    时间: 2015-5-15 14:54
标题: 关于指针的一道题
学习C语言这么久 一看到指针和字符串就晕头,每次写完都由一大堆错误。
下面是基础测试里的一道题,求解答 要求详细分析过程
1、 设有定义int a[]={1,3,5,7,9},*p=a;结果为7的表达式是()。
A) *(p+3)
B) *(p+4)
C) *p+3
D) *p+4
作者: jingkai    时间: 2015-5-15 19:46
没有人么亲们,好失望
作者: lyricdon    时间: 2015-5-15 19:50
正确选项为A。
*p=a,即指针p指向数组a的首地址,即a[0],
*p=a[0]=1;
C、D选项结果是4、5 所以不对,
*(p+3)表示把p指针向后移3位,即a[3],也就是5
故A选项不正确,B选项表示a[4]是正确答案
作者: 挑战    时间: 2015-5-15 19:55
学习了。。。。
作者: ios专用    时间: 2015-5-15 20:27
选择A,C D这种写法是错误的,排除。然后数组位标是从0开始的,故7的位标是3,选A
作者: CornerFly    时间: 2015-5-15 21:09
选A,int *p = a ;// 定义了一个指向整数的指针p,并且把数组a的地址(也就是数组a的首地址)赋值给p。
作者: CornerFly    时间: 2015-5-15 21:18
选A,int *p = a ;// 定义了一个指向整数的指针p,并且把数组a的地址(也就是数组a的首地址)赋值给p,  *p是取出p所指元素的存储空间的数据。所以*(p + 3)就是指针p在数组内下移3个,也就是由原来的指向a[0],变成了指向a[3],再加上*,就是取出a[3]所占内存的数据,也就是7.所以选A。
同理,可知B取出的数据是9;
C选项:*p指的是取出p所指的元素的存储空间中的数据,也就是1;再加上3,输出结果是4
同理:D输出的结果是1 + 4,也就是5.
作者: su199325    时间: 2015-5-15 22:39
A,因为指针变量的p+1相当于加一个int(即4个字节的地址),所以p从首地址开始向后加3就是7,*(p+3)
作者:   张恒宇    时间: 2015-5-15 23:29
A...*p访问的是a的存储空间但是地址是从0开始的。。。。可以知道p[3]=a[4]=7.。。。
作者: 追随自然    时间: 2015-5-15 23:59
学到东西了!
作者: wangvsv    时间: 2015-5-16 01:27
你只指针和地址没学好。
作者: welfarezhang    时间: 2015-5-16 09:50
答案是A *P = a,是把数组的首元素地址赋值给P,P中存储的是首元素的值,相当于a[0],*(P+3),是把指针移动三个单位,即指针指向的是a[3]元素的地址,该地址中存储的值是7,所以答案是A.希望对你有所帮助
作者: doushu    时间: 2015-5-16 21:46
教程里有呀 亲。。。
作者: aSmallStone    时间: 2015-5-17 22:57
*P为首地址的值
*P+1为首地址的值在数值上再+1 以此类推
*(p+1)为下一个单元地址的值
*(p+2)为首地址之后的第二个地址的值

作者: wwwwjay    时间: 2015-5-17 23:03
答案A,   C里指针的确饶人




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