C语言的问题,这道题怎么做?

8.16的第四小题

指针s已经指向a[2],可以理解为指针本身就是一个数组的头地址,首元素是a[2],即s[0]实际就是a[2],所以a[3]就是s[1]
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-28
*(s+1)或者s[1]。追问

答案是*(s+1)可是为啥?提上不是说了不能移动指针啊,既然不能移动指针,那s就不可能+1了吧?

追答

+1就移动了指针了?用下列代码段试试?printf("%p\n",s);printf("%d\n",*(s+1));printf("%p\n",s);,执行过后你看看s移动了没有。s+=1、s++、++s、s=s+1,当n是不为0的整数时,s+=n、s=s+n都移动了指针,而s+n是不会移动指针的。

追问

为什么s+n不移动指针?

书上也写着所谓移动指针就是对指针变量加上或减去一个整数

追答

你已经钻到牛角尖最小的那里了!“加上或减去一个整数”的意思是把所得到的结果再赋给那个指针变量才能使指针“移动”。你就是加一千减一万,不赋给原指针变量,原指针变量能移动吗?所以s=s+n,使指针s移动了n个元素,而s+n却没有移动指针s。

追问

明白了

相似回答