下列程序段的输出是_____。 char *a[2]={"one", "two"}, **p=a;

下列程序段的输出是_____。
char *a[2]={"one", "two"}, **p=a;
printf("%s,", *(p++)+1);
printf("%c\n", **p-1);

第1个回答  2015-01-28
指针p指向二维数组a,初始值指向首行首列,即a[0][0],也是二维数组的第一行,*(p++),先取p的值,仍然是首行;*(p++)+1就是第一行的n了,输出:ne
再p++,指向第二行了;
*p:这时是指向第二行的行首了,就是two。**p就是't',**p-1就是't'-1,t的前一个字符是什么?'s'嘛。

注意:字符串数组其实就是二维数组。追问

*(p++)+1指向n输出ne

追答

指针就是地址值,*(p++)是一个地址值,此时的指向第一行,也是a[0][0]的地址,那再加1,不就是a[0][1]的地址了吗?*(p++)也就是a[0][1],指针指向了了a[0][1],即n了,printf("%s,", *(p++)+1);就是输出指针位置开始的字符串,也就是"ne"。
还有:C语言二维数组的指针运算*p+1与*(p+1)含义是不一样的,前者是下移一个列(元素),后者是下移一行。

所以*(p++)+1中的++是改变行,+1中的加号是改变列。

本回答被网友采纳
第2个回答  2015-01-28
wo
s
是这个
希望能帮到楼主 给个采纳吧 有不懂的可以追问追问

不是

Ne, s (ne给1分, s给1分)

追答

那答案是?

追问

^_^

追答

不懂为什么是Ne

追问

我也不懂

我去调试一下

追答

相似回答