如何在C中声明常量数组参数?

时间:2016-03-27 17:15:20

标签: c arrays parameters const

我可以写

#include <stdio.h>

int main(const int argc, const char * const * const argv) {
    argv = NULL;
    printf("Hello, world\n");
    return 0;
}

这不会编译,因为argv是const(这很好)。

然而,我读过的文档建议char * argv[argc + 1]作为声明argv的更好方法。但是我怎么能这样做这个声明样式使argv本身成为const?

#include <stdio.h>

int main(const int argc, const char * const const argv[argc + 1]) {
    argv = NULL;
    printf("Hello, world\n");
    return 0;
}

这可以编译,但我真的不喜欢它。

1 个答案:

答案 0 :(得分:3)

参见C标准,6.7.3p9

  

如果数组类型的规范包含任何类型限定符,则元素类型是限定的,而不是数组类型。 ...

因此,const无法应用于数组名称。要么使用指针语法,要么使用非const指针。请注意,这对大多数体系结构中的正确代码没有影响。

由于argv是指向两个版本中第一个元素的指针,请参阅6.7.6.3p7char **argvchar *argv[]参数之间实际上没有区别。您不能将数组(作为数组)传递给函数。