代码段如下:
char *s[] = {"program", "test", "load", "frame", "stack", NULL};
char **p = s + 2;
我们需要找到以下语句的输出:
printf("%s", p[-2] + 3);
p[-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
指向1000
,p
将指向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。