1

代码片段如下:

char *s[] = {"program", "test", "load", "frame", "stack", NULL};
char **p = s + 2;

我们需要找到以下语句的输出

printf("%s", p[-2] + 3);

p[-2]指的是什么?

4

2 回答 2

2
char *s[] = {"program","test","load","frame","stack",NULL};
char **p = s + 2
printf("%s", p[-2] + 3);
  • 该变量s是一个char*指针数组。
  • 变量p是指向指针的指针。指针算法将数组降级s为 a char**,初始化p为 a 大小的两倍char**。在 32 位机器上,如果s指向1000p将指向1008

该表达式p[-2]等价于*(p - 2),返回一个指向 a 的简单指针char*。在这种情况下,指向字符串数组的第一个元素的值:"program"

最后,因为*(p - 2)是指向字符串第一个字母的表达式"program"*(p - 2) + 3指向那个单词的第四个字母:"gram"

printf("%s", *(p - 2) + 3); /* prints: gram */
于 2011-02-14T12:28:22.117 回答
0

你试过编译你的代码吗?修复语法错误后,输出为gram

#include <stdio.h>

int main()
{
    char *s[] = {"program","test","load","frame","stack",NULL};
    char **p = s + 2;

    printf("%s",p[-2] + 3);

    return 0;
};

有关编译和输出,请参见http://ideone.com/eVAUv

于 2011-02-14T12:41:48.530 回答