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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jingkai 中级黑马   /  2015-5-15 14:54  /  1500 人查看  /  14 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

学习C语言这么久 一看到指针和字符串就晕头,每次写完都由一大堆错误。
下面是基础测试里的一道题,求解答 要求详细分析过程
1、 设有定义int a[]={1,3,5,7,9},*p=a;结果为7的表达式是()。
A) *(p+3)
B) *(p+4)
C) *p+3
D) *p+4

14 个回复

倒序浏览
没有人么亲们,好失望
回复 使用道具 举报
正确选项为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]是正确答案
回复 使用道具 举报
学习了。。。。
回复 使用道具 举报
选择A,C D这种写法是错误的,排除。然后数组位标是从0开始的,故7的位标是3,选A
回复 使用道具 举报
选A,int *p = a ;// 定义了一个指向整数的指针p,并且把数组a的地址(也就是数组a的首地址)赋值给p。
回复 使用道具 举报
选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.
回复 使用道具 举报
A,因为指针变量的p+1相当于加一个int(即4个字节的地址),所以p从首地址开始向后加3就是7,*(p+3)
回复 使用道具 举报
A...*p访问的是a的存储空间但是地址是从0开始的。。。。可以知道p[3]=a[4]=7.。。。
回复 使用道具 举报
学到东西了!
回复 使用道具 举报
你只指针和地址没学好。
回复 使用道具 举报
答案是A *P = a,是把数组的首元素地址赋值给P,P中存储的是首元素的值,相当于a[0],*(P+3),是把指针移动三个单位,即指针指向的是a[3]元素的地址,该地址中存储的值是7,所以答案是A.希望对你有所帮助
回复 使用道具 举报
教程里有呀 亲。。。
回复 使用道具 举报
*P为首地址的值
*P+1为首地址的值在数值上再+1 以此类推
*(p+1)为下一个单元地址的值
*(p+2)为首地址之后的第二个地址的值
回复 使用道具 举报
答案A,   C里指针的确饶人
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马