的代码片段给出如下:字符数组,指针
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
降级为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 */
你试过编译你的代码吗?一旦语法错误被修复,输出是克。
#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-14 11:54:35
存在语法错误:`printf {...);`不会编译。 – vz0 2011-02-14 12:11:18