谁能解释一下它的打印输出是 "ink"

标签 c pointers obfuscation

我是 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",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2461555/

相关文章:

c - 在 C 中处理用户输入

c - 参数中的 "char*"是指向单个 char 还是 char 数组的指针?

java - Proguard 只保留类名以及类中的所有成员和方法

c++ - 字符串指针中的有趣错误

c - 如何将ascii符号写入char表?

c - 忽略尾部读取大小受限的输入行

c - 动态内存的初始值是多少

webpack - 如何使用 webpack 混淆 js 文件

android - 将混淆器与谷歌分析 android 一起使用

在 ESP8266 上读取 c 中的 const* 时崩溃