代码片段如下:
char *s[] = {"program", "test", "load", "frame", "stack", NULL};
char **p = s + 2;
我们需要找到以下语句的输出:
printf("%s", p[-2] + 3);
p[-2]指的是什么?
代码片段如下:
char *s[] = {"program", "test", "load", "frame", "stack", NULL};
char **p = s + 2;
我们需要找到以下语句的输出:
printf("%s", p[-2] + 3);
p[-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指向1000,p将指向1008。该表达式p[-2]等价于*(p - 2),返回一个指向 a 的简单指针char*。在这种情况下,指向字符串数组的第一个元素的值:"program"。
最后,因为*(p - 2)是指向字符串第一个字母的表达式"program",*(p - 2) + 3指向那个单词的第四个字母:"gram"。
printf("%s", *(p - 2) + 3); /* prints: gram */
你试过编译你的代码吗?修复语法错误后,输出为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。