What does “const void * const *” mean in C?
本问题已经有最佳答案,请猛点这里访问。
我在看OpenGL中的一个函数glmultidrawElements,它将其中一个参数定义为具有这种类型:
https://www.opengl.org/sdk/docs/man4/html/glmultidrawelements.xhtml
在这个建筑中
1 | const GLvoid * const *. |
第二个限定符
此参数声明
1 | const GLvoid * const * indices |
意味着使用指针
考虑下面的例子
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> void f( const char **p ) { p[0] ="B"; } int main( void ) { const char * a[1] = {"A" }; f( a ); puts( a[0] ); } |
此函数将成功编译,您可以更改[0]的值。
但是,如果按以下方式重写程序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> void f( const char * const *p ) { p[0] ="B"; } int main( void ) { const char * a[1] = {"A" }; f( a ); puts( a[0] ); } |
编译器发出如下错误:
1 2 3 4 | prog.c:10:10: error: read-only variable is not assignable p[0] ="B"; ~~~~ ^ 1 error generated. |