的代碼片段給出如下:字符數組,指針
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