typedef float vec3[3];
void test(vec3 const vptr) {
*vptr = 1.f; // error: assignment of read-only location
vptr[0] = 1.f; // error: assignment of read-only location
vptr++; // no error
}
时
vec3 const vptr
与
相同const vec3 vptr
对于所有typedef?最后两个之间有什么区别吗?我想
vec3 const vptr <==> float* const vptr // a constant pointer to an object
const vec3 vptr <==> const float* vptr // a pointer to a constant object
??? <==> const float* const vptr // a constant pointer to a constant object
答案 0 :(得分:4)
此typedef
typedef float vec3[3];
定义数组类型float[3]
参数
的声明vec3 const vptr
将vptr
声明为数组类型const float[3]
。
指定为具有数组类型的函数参数将调整为指向数组元素类型的对象的指针。
所以这个宣言
vec3 const vptr
调整为const float *vptr
类型。也就是说,它是一个指向常量对象的非常量指针。
这种关系
vec3 const vptr&lt; ==&gt; float * const vptr //一个指向的常量指针 对象
错了。而这句话
vptr++; // no error
确认了这一点。
您无法获得此声明
const float* const vptr
使用此typedef
typedef float vec3[3];