gpt4 book ai didi

C typedef 常量参数

转载 作者:太空狗 更新时间:2023-10-29 16:56:22 25 4
gpt4 key购买 nike

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

对于所有类型定义?最后两个有什么区别吗?我以为

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

最佳答案

这个类型定义

typedef float vec3[3];

为数组类型定义一个别名float[3]

这个参数的声明

vec3 const vptr

vptr 声明为数组类型 const float[3]

指定为具有数组类型的函数参数被调整为指向数组元素类型的对象的指针。

所以这个声明

vec3 const vptr

调整为 const float *vptr 类型。即它是指向常量对象的非常量指针。

这种关系

vec3 const vptr <==> float* const vptr // a constant pointer to an object

错了。而这个声明

vptr++; // no error

确认。

你得不到这个声明

const float* const vptr 

使用这个类型定义

typedef float vec3[3];

关于C typedef 常量参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43169309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com