我是C语言的新手,所以我希望我使用的术语是正确的。我已经看到一些资源建议应该使用VLA语法的函数参数,应该是非空指针,如下所示
void foo(char bar[static 1])
这意味着bar
应该是一个非空的指针,因为指针会衰减。一些编译器可能会发出关于传递空指针的警告。
我想知道如何将该参数声明为指向const
char的const
指针。那么,VLA语法中的
void foo(char bar* const)
这适用于指向const char
的指针
void foo(const char bar[static 1])
但
void foo(const char const bar[static 1])
发出关于重复const
的警告。
2条答案
按热度按时间pcww981p1#
您需要将
const
关键字放在方括号内:这(或多或少)相当于:
92dk7w1h2#
void foo(const char bar[static const 1])
相当于:
void foo(const char*const bar)
(除了可能的空指针检查)
也就是说,指向类型的限定符像往常一样写在指向类型说明符的左边:
const char
。而
[ ]
之间的所有限定符都应用于“衰变”指针类型本身。理解它的最简单方法可能是考虑哪种指针类型等效于数组参数版本。在这种情况下,void foo(const char bar[1])
100%等效于void foo(const char* bar)
,前者被调整为后者。在处理
restrict
指针的罕见情况下,了解这一点很重要。如果你有两个数组,保证不重叠,不能是空指针,那么:同样对于2D阵列:
void foo (size_t n, char bar[const][n]);
->void foo (size_t n, char(*const bar)[n]);