有人关于如下代码为何编译出错不解:
- #include<stdio.h>
- main()
- {
- char a[][5] = {"abcd", "efgh", "ujkl"};
- char (*p)[3];
- p[0]=a[0];
- printf("%s/n", p[0]);
- }
解释如下:
a的类型为
a : arr ( 3, arr ( 5, char ) ) 可以读作 a is arr(3) of arr(5) of char
p的类型为
p : pointer ( arr ( 3, char ) ) 可以读作 p is pointer to arr(3) of char
a[0]是arr (5, char );p[0]是*p的语法糖表现,类型是 arr(3) of char,不能作为左值,故语法错误。另外,3个元素的char数组放不下5个元素的char数组。
对于上述错误代码,最合乎原意的最简单的改动是char (*p)[3];==>char *p[3];
修改后
p的类型为
p : arr ( 3, pointer ( char ) )
p[0]: pointer(char),可以作为左值。