C语言中函数参数mystruct_t * const * pVar的含义是什么
声明解析结论
该参数不是指针值和指针地址均为常量的类型,我们按照C语言的右左声明规则拆解mystruct_t * const * pVar的完整含义:pVar是一个**指向「const修饰的、指向mystruct_t类型的指针」**的二级指针,各层的可修改性如下:
- 可以修改
pVar本身的取值:比如你在函数内执行pVar = NULL是合法操作,pVar这个二级指针自身的指向可以变更 - 不可以修改
*pVar的取值:*pVar的类型为mystruct_t * const,属于常量指针,不能修改它指向的mystruct_t实例地址,比如*pVar = &another_struct会直接触发编译报错 - 可以修改
**pVar的内容:const没有修饰最内层的mystruct_t类型,你可以正常修改最终指向的结构体成员,比如(*pVar)->member = 1是合法操作
如果你需要实现「pVar自身的指向不可修改、同时pVar指向的一级指针指向也不可修改」的效果,也就是你说的指针值和指针地址均为常量的类型,正确的声明应该是:
void myfunc(mystruct_t * const * const pVar)
内容的提问来源于stack exchange,提问作者ITW
相关产品推荐
相关产品推荐

