有以下程序
main()
{ char s[]="abcde";
s+=2;
printf("%d\n",s[0]);
}
执行后的结果是(D)
A)输出字符a的ASCII码 B)输出字符c的ASCII码
C)输出字符c D)程序出错
(第一次见到这种题,也许会有一些人是这么认为的,s是数组名,这里是数组首元素地址,s+=2,指针向后移两位,指向字符c,打印%d,输出c的ASCIL码值。这样的思路是错的,指针如何移动与数组内元素息息相关,加一就是移向下一个元素,而在数组s[]中,只有“abcde”这一格字符串元素,所以加2后向后移动两个元素大小的空间,这会导致数组越界,从而使程序出现问题。)错误。
这么说其实是有明显问题的,之前一直没有纠正。这道题主要考察的是数组名的的用法,数组名是常变量。因此对s采用+=的方式是不合理的,程序会报出编译错误。如果想取数组首元素后的元素的地址,可以再定义一个指针p,对这个指针p进行+=。其次,这里就算s+=成立也不会导致越界,这与指针的类型有关,s是char类型,加1只会向后移动一个字节,s+=2后会指向c的位置,输出c的ASCLL码值,既99.综上所述,这道题选D。