我一直在摆弄,看看是否有任何方法可以在传递给函数时自动保留有关数组长度的信息(请参见此处的其他问题:为什么这个数组大小“变通办法”会向我发出警告?),但是我的问题是更多的是关于gcc提供的警告,这对我来说没有任何意义。
根据此网站(EDIT:我误读了该网站),char *p[10]
声明了一个指向10个字符的数组的指针。但是,当我尝试将指向数组的指针传递给函数时,我从编译器收到以下错误消息:
这是程序的其余部分:
我知道,将数组传递给函数时,它会衰减为指针(丢失有关其长度的信息),但是声明本身似乎在衰减。这里发生了什么?
编辑:当我更换char *p[10]
使用char (*p)[10]
,它没有给出警告了,更重要的是,它会显示正确数组长度:10,我想我的问题是:1)为什么括号改变的事情?和2)这是众所周知的解决方法,还是我依赖于无法保证编译器的某些行为?(即数组长度信息可以通过间接传递指向它的指针来传递吗?)
实际上char *p[10]
是一个指向的指针,其长度为10 char
。您正在寻找char (*p)[10]
。这是指向长度为10的数组的指针char
。
您可能会发现http://cdecl.org/是一个有用的资源,可以帮助您测试对声明的理解。
关于动态数组的讨论,您将不得不接受的是,一旦动态分配了数组,系统将无法为您提供恢复数组长度的方法。记住这些信息是您的责任。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句