我是 C 中的指针的新手。我知道基本概念。在下面的代码中,为什么将“墨水”打印为输出?
#include<stdio.h>
main()
{
static char *s[]={"black","white","pink","violet"};
char **ptr[]={s+3,s+2,s+1,s},***p;
p=ptr;
++p;
printf("%s",**p+1);
}
谢谢
最佳答案
让我们追踪一下:
ptr = {pointer to "violet", pointer to "pink", pointer to "white", pointer to "black"}
p = ptr --> *p = pointer to "violet"
++p --> *p = pointer to "pink"
这意味着:
*p = {'p','i','n','k','\0'}
意思是:
**p = 'p'
**p + 1 = 'i'
所以
**p + 1
是指向这个字符串的指针: {'i', 'n', 'k', '\0'}
,它就是 "ink"
。关于任何人都可以解释它的打印输出如何作为 "ink",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2461555/