|
发表于 2023-4-5 13:42:58
|
显示全部楼层
这段程序使用了函数指针和二维数组来实现输出字符串 "Hello World!"。下面对代码进行逐行解释:
```c
头文件包含标准输入输出库。
- char *a(){return "H";}
- char *a1(){return "e";}
- char *a2(){return "l";}
- char *a3(){return "l";}
- char *a4(){return "o";}
- char *a5(){return " ";}
- char *a6(){return "W";}
- char *a7(){return "o";}
- char *a8(){return "r";}
- char *a9(){return "l";}
- char *a10(){return "d";}
- char *a11(){return "!";}
复制代码 定义了12个返回类型为 char* 的函数,每个函数返回的是一个字符。
- int main()
- {
- int i;
- char *(*m[3][4])()={
- {a,a1,a2,a3},
- {a4,a5,a6,a7},
- {a8,a9,a10,a11}
- };
- char*(**p)();
- p=&m;//这里用p=m;为啥是一样的结果?
- for(i=0;i<12;i++)
- {
- printf("%s",(*(p+i))());
- }
- printf("\n");
- return 0;
- }
复制代码 ```
main 函数中定义了一个二维函数指针数组 m,其中每个元素都是一个指向一个返回类型为 char* 的函数的指针。接着定义了一个指向函数指针的指针 p,并将其指向数组 m。然后通过循环执行每个函数,并将函数返回的字符打印出来,最终输出 "Hello World!"。
至于为什么 `p=&m;` 和 `p=m;` 的结果是一样的,这是因为数组名本身就是一个指向数组首元素的指针,所以它和 `&m[0][0]` 是等价的。 |
|