代码片段如下:
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。