sma*_*007 2 c opengl pointers constants
我正在查看 OpenGL 中的函数 glMultiDrawElements ,它将其参数之一定义为具有以下类型:const GLvoid * const *。显然 GLvoid 是无效的,但我的问题是第二个是什么const意思?它可以被忽略吗?如果可以,有人可以解释一下为什么这样做。
https://www.opengl.org/sdk/docs/man4/html/glMultiDrawElements.xhtml
在本次施工中
const GLvoid * const *.
Run Code Online (Sandbox Code Playgroud)
第二个限定符const意味着该指针const GLvoid *是一个 const 指针。也就是说,它是一个常量指针,指向类型为 const 的对象GLvoid。
该参数声明
const GLvoid * const * indices
Run Code Online (Sandbox Code Playgroud)
意味着使用指针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] );
}
Run Code Online (Sandbox Code Playgroud)
该函数将编译成功,您可以更改a[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] );
}
Run Code Online (Sandbox Code Playgroud)
编译器会发出类似的错误
prog.c:10:10: error: read-only variable is not assignable
p[0] = "B";
~~~~ ^
1 error generated.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9926 次 |
| 最近记录: |