以下程序
#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");}