【发布时间】:2013-04-01 15:22:29
【问题描述】:
int (*z())[5];
这是什么?如果我把它作为全局声明放在 main 之前,它会编译。我认为 z() 将是一个指针( "z()" )所以尝试了:
int itab[5]={0,1,2,3,4};
((z())[0])[0]=itab;
这给出了错误:
错误:从“int*”到“int”的无效转换
所以我想啊哈,所以我很接近并尝试了:((z())[0])[0]=*itab;
编译但给链接器未解决的符号错误:
g++ -o dist/Debug/GNU-Linux-x86/cppappl_example4 构建/调试/GNU-Linux-x86/main.o 构建/调试/GNU-Linux-x86/main.o: 在函数
main': /NetBeansProjects/cppappl_example4/main.cpp:242: undefined reference toz()'
所以我的问题是:这个声明正确吗?如果是,那么它是什么,如何使用?
编辑: 答案中给出的链接确实有很大帮助:
nice rule of spiral by David Anderson
谢谢!
【问题讨论】:
-
z是一个不带参数的函数,它返回一个指向由 5 个ints 组成的数组的指针。 -
@chris:螺旋法则……好吧,如果你能应用它,你就不需要它,如果你需要它,它会在复杂情况下失败。甚至可能很难找到从哪里开始螺旋!!!
-
@DavidRodríguez-dribeas,你能给我举个例子说明它在哪里不起作用。它帮助我弄清楚了自阅读以来我所看到的每一个复杂的声明。
-
@chris:问题在于规则过于简单化,要能够应用它,您需要了解的不仅仅是它所说的。如果您只是按照该页面中的定义,
char * const a[10][10];的解释将是a是一个由 10 个数组组成的数组const由 10 个指向char的指针组成的数组...螺旋和何时不转换为 array of 10 array of 10 constant pointers tochar,但这几乎不是 spiral... 我更喜欢从中心开始(名称)并向外增长,没有隐含的螺旋
标签: c++ arrays pointers function-pointers