【发布时间】:2014-03-14 10:19:56
【问题描述】:
我一直在摆弄,看看是否有任何方法可以在传递给函数时自动保留有关数组长度的信息(请参阅我的另一个问题:Why is this array size "workaround" giving me a warning?),但我的问题更多的是关于 gcc 的警告给予这对我来说没有意义。
根据this 网站(编辑:我误读了网站),char *p[10] 声明了一个指向 10 宽字符数组的指针。但是当我试图将一个指向数组的指针传递给一个函数时,我从编译器收到了这个错误消息:
这是程序的其余部分:
我知道当一个数组被传递给一个函数时,它会衰减为一个指针(丢失有关其长度的信息),但似乎声明本身正在衰减。这是怎么回事?
编辑:当我将char *p[10] 替换为char (*p)[10] 时,它不再发出警告,更重要的是,它显示了正确的数组长度:10。我猜我的问题是 1)为什么括号会改变事情?和 2) 这是一个众所周知的解决方法,还是我依赖于编译器的某些无法保证的行为? (即,可以通过间接传递指向它的指针来传递数组长度信息?)
【问题讨论】:
-
“根据这个网站,char *p[10] 声明了一个指向 10 宽字符数组的指针。” - 你看错了,这是一个由 10 个
char*组成的数组。 -
char *p[10]是一个由 10 个指针组成的数组,而不是“指向 10 个字符数组的指针”(即char (*p)[10]) -
哎呀。你说的都对,我看错了。谢谢。对我的编辑主题有任何见解吗?