答案是A。
s是数组名,数组名是一个指针(确切地说是指针常量,指向数组中第0个元素),ps被定义成了指针,初始化为数组元素中第一个单元的首地址(即'p'字符的地址);
A选项:指针加上一个整数还是一个指针,含义是该指针指向的位置向地址增加方向相应数目的存储单元。因此,ps+2也是一个指针(这里字符假设占1个字节,指向的是数组中第2个字符‘o’),但是指针保存的是地址,而不是相应地址单元中的数据(在本题中是字符类型数据),通过对指针进行解引用操作才是相应地址中存放的数据(*(ps+2)就表示'o'字符);
B选项:通过下标访问数组元素,显然s[2]是数组中第2(从0计数)个字符,即'o';
C选项:指针被初始化为数组中第0个元素首地址,因此通过下标访问指针,得到的同样是数组中的'o'字符;
D选项:ps是指针,指针支持+操作,含义是指针内地址向右移动若干个元素的单元。ps+=2相当于ps=ps+2,因此向右移动2个字符所占空间的单元,原本指向数组中第0个字符,移动之后该指针存放的时第2个单元的地址,进行解引用操作得到的就是第2个单元内存储的字符。
char s[20]="programming",*ps=s;
A、ps+2这是代表字符串首地址+2之后的地址,而不是内容,所以这就是答案
B、s[2]
C、ps[2]
D、ps+=2,*ps
B、C、D三个都代表的是字符串的内容,即第三个字符o,特别指出是D答案是先将ps指针移到o地址上,*ps代表的就是其内容
答案是A吧!!ps是指针,所以ps就代表地址,ps+2也是地址!!!但是它代表字符o的地址,,,
#include
void main()
{
char s[20]="programming";
char *ps;
ps=s;
printf("%c %c %c\n",ps+2,s[2],ps[2]);
ps=ps+2;
printf("%c\n",*ps);
}
结果A错。