C typedef const参数

时间:2017-04-02 14:11:20

标签: c typedef declaration

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

1 个答案:

答案 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];