指针声明中保护结构底层成员的“const”的范围是什么?
这是我的代码解释:
typedef struct {
int member1;
int member2;
}tInnerStruct;
typedef struct {
tInnerStruct *struct1;
tInnerStruct *struct2;
tInnerStruct *struct3;
}tContainerStruct;
void function1(const tContainerStruct * ptr)
{
// L1 | L2 | L3 => Up to which level 'const' protects ?
ptr->struct1->member1 = 5; // => Why is this legal?
// Shouldn't 'const' protect this?
}
“const”限定符保护底层成员的级别最高? 似乎很明显
ptr->struct1
无法修改,struct2 和 struct3 也是如此,因为结构体的成员被标记为 const。但是 struct1、struct2 和 struct3 的所有成员都完全不受 'const' 修饰符的影响吗?
最佳答案
const
仅适用于它正在修改的声明部分。
所以:
int d;
int * const q = &d;
*q = 3; /* OK, *q is not const */
q = NULL; /* ERROR, q is const */
const int * p;
p = &d; /* OK, p is not const */
*p = 3; /* ERROR, *p is const */
const
ness 不会遍历它所应用的直接对象。
对于您的示例,const tContainerStruct
意味着 tContainerStruct
的每个成员都将是 const
。假设我们定义:
typedef struct {
tInnerStruct * const struct1;
tInnerStruct * const struct2;
tInnerStruct * const struct3;
}constant_tContainerStruct;
然后 constant_tContainerStruct
的行为就像您的 const tContainerStruct
一样。但是,由于 const 应用于指针成员,因此它对所指向的 tInnerStruct 没有影响,因此这些对象仍然是可修改的。
关于c - 'const' 的范围,用于保护 C 中结构的底层成员的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50957470/