以下程序
#include <stdio.h> void fun(char **p) { int i; for (i = 0; i < 4; i++) printf("%s", p[i]); } main() { char *s[6] = {"ABCD", "EFGH", "IJKL", "MNOP", "QRST", "UVWX"}; fun(s); printf("\n"); }
程序运行后的输出结果是?
“三鹰大魔王”是错误解析,大家别看他的!
正确解析:
char *s[6]={ "ABCD", "EFGH", "IJKL", "MNOP", "QRST", "UVWX" };
以上语句定义了一个指针数组 s
。首先这是一个数组,这个数组里存储的是指针,也就是说s[1], s[2] ...
等存储的都是指针,类型是 char*
。
而数组名是指向第一个元素的常量指针,因此 s
是指向指针的指针,所以函数 fun
的形参定义是 char **
。
fun(s)
将指针 s
的值传递给形参 p
,所以 p = s
,因此
for(i=0;i<4;i + + )printf("% s",p[i]);
中 printf("% s",p[i])
等价于 printf("% s",s[i])
。
注意,虽然 s[i]
中存储的不是字符串,而是 char *
类型的指针,但是 printf
还是会输出 s[i]
存储的指针指向的字符串。所以最后输出为 D。
#include <stdio.h>void fun( char ** p){int i;for(i=0;i<4;i + + )printf("% s",p[i]);}main( ){char *s[6]={ "ABCD", "EFGH", "IJKL", "MNOP", "QRST", "UVWX" };fun(s);printf("\n");}