字符数组和指针

时间:2011-02-14 11:52:46

标签: c pointers char printf character-arrays

代码段如下:

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

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

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

p[-2]指的是什么?

2 个答案:

答案 0 :(得分:2)

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

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

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

printf("%s", *(p - 2) + 3); /* prints: gram */

答案 1 :(得分: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