我是 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/

10-12 17:17
查看更多