&a以下代码中的类型是什么?
char a[100];
myfunc(&a)
Run Code Online (Sandbox Code Playgroud)
这甚至是有效的代码吗?gcc -Wall抱怨缺少原型,但否则会生成代码,就好像myfunc(a)写了一样.
caf*_*caf 15
该&a代码的类型是char (*)[100],"指向100个字符数组的指针".
要正确地进行原型myfunc以获取该参数,您可以这样做:
void myfunc(char (*pa)[100]);
Run Code Online (Sandbox Code Playgroud)
或完全等同的:
void myfunc(char pa[][100]);
Run Code Online (Sandbox Code Playgroud)
附录:
在回答评论中的其他问题时:
是的,您将使用(*pa)[0]或pa[0][0]在其中myfunc访问数组的第一个元素.
不,&a(因此pa)包含数组的地址.它们不包含地址.很明显,数组的地址和第一个元素的地址是相同的 - 唯一的区别是类型.这(void *)&a == (void *)a是真的,(void *)pa == (void *)pa[0]也是如此,即使这看起来有点不直观.
考虑这两个声明:
char (*pa)[100];
char **ppc;
Run Code Online (Sandbox Code Playgroud)
现在,即使pa[0][0]和ppc[0][0]类型都是char,类型的pa和ppc是不等价的.在第一种情况下,中间表达式pa[0]具有类型char [100],然后该类型计算为指向该数组中第一个元素的指针char *.在第二种情况下,中间表达式ppc[0]已经是a char *.
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |