我在OpenGL中查看函数glMultiDrawElements,并将其中一个参数定义为具有此类型:const GLvoid * const *
。显然GLvoid只是空洞但我的问题是第二const
甚至意味着什么?它可以被忽略吗?如果有的话,有人可以解释它为什么这样做。
https://www.opengl.org/sdk/docs/man4/html/glMultiDrawElements.xhtml
答案 0 :(得分:3)
在这个结构中
const GLvoid * const *.
第二个限定符const
表示指针const GLvoid *
是一个const指针。也就是说,它是一个指向GLvoid
类型的const对象的常量指针。
此参数声明
const GLvoid * const * indices
表示使用指针indices
可能不会更改指针(或指针,如果此指针指向指针数组的第一个元素),它指向。
考虑以下示例
#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]的值。
但是,如果您按以下方式重写程序
#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] );
}
编译器发出错误,如
prog.c:10:10: error: read-only variable is not assignable
p[0] = "B";
~~~~ ^
1 error generated.