有人提出一个论点,说在现代C中,我们应该总是通过数组指针将数组传递给函数,因为数组指针具有强类型.例:
void func (size_t n, int (*arr)[n]);
...
int array [3];
func(3, &array);
Run Code Online (Sandbox Code Playgroud)
这听起来像防止各种类型相关和数组越界错误可能是一个好主意.但后来我发现我不知道如何将const正确性应用于此.
如果我这样做void func (size_t n, const int (*arr)[n])那么它是正确的.但是由于指针类型不兼容,我无法再传递数组.int (*)[3]对比const int (*)[3].限定符属于指向的数据,而不属于指针本身.
调用者中的显式强制转换将破坏增加类型安全性的整个想法.
如何将const正确性应用于作为参数传递的数组指针?它可能吗?
编辑
就像信息一样,有人说通过像这样的指针传递数组的想法可能源于MISRA C++:2008 5-2-12.例如,请参阅PRQA的高完整性C++标准.