什么" const void * const *"在C?

时间:2015-08-09 19:37:50

标签: c opengl

我在OpenGL中查看函数glMultiDrawElements,并将其中一个参数定义为具有此类型:const GLvoid * const *。显然GLvoid只是空洞但我的问题是第二const甚至意味着什么?它可以被忽略吗?如果有的话,有人可以解释它为什么这样做。

https://www.opengl.org/sdk/docs/man4/html/glMultiDrawElements.xhtml

1 个答案:

答案 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.