s里面存的是字符串abcde的地址,不能被修改。s += 2 的话就会修改s的值,所以不可以。可以这样:char s[ ] = "abcde";char *a = s + 2;printf("%d\n",a[0]); //输出的是99 ,即c的ascii码值。 ------------------------------------------------------------------------------对于你的问题补充,我是这样理解的:s的值是不能被修改的。然而s += 2 就是 s = s + 2。这样会修改s的值。如果你想指向s的下两个字符,应该再定义一个字符指针变量,用它来操作。不知道我理解的对不对。 -------------------------------------------------------------------------------问:数组不也是指针吗答:数组不是指针。数组名存的是数组首地址,这个应该是不能被修改的常量。就像你上面程序里的s。指针可以是指针常量也可以是指针变量。对于指针变量,是可以修改它的值的,就像我的程序里的a。但是指针常量是不能被修改的。这里的指针常量就可以看成是上面提到的那个数组名。我是这么理解的。