【发布时间】:2012-11-01 16:36:12
【问题描述】:
我有一个包含一些指针的结构。我希望这些的价值是不可修改的。但是简单地写 const infront 并不会使结构成员不可变
typedef struct{
int *x;
int *y;
}point;
void get(const point *p,int x, int y){
p->x[0]=x;//<- this should not be allowed
p->y[0]=y;//<- this should not be allowed
}
谁能指出我正确的方向。
编辑:
因此似乎没有简单的方法可以使用函数原型来告诉属于该结构的所有内容都应该是不可修改的
【问题讨论】:
-
你想要什么不可修改?指向
ints?然后const int *x;表示您不能通过该指针修改指向的值。指针?然后int * const x;禁止修改指针。 -
如果我的 int *x, 是一个数组,那么我希望这个数组中的值是不可修改的。
-
那么你需要在结构定义中
const int *x;。请注意,数组中的值仍然可以通过其他指针进行修改(如果x指向const int arr[3] = { 15, 7, 3 };左右的元素,则可能会调用未定义的行为)。 -
int *x不是一个数组,它是一个指针。如果您声明了int x[20],那么该数组将成为consted 区域的一部分。但是x是一个指针,它的constness 独立于p之一。 -
您的编辑注释是错误的,因为
const正是这样做的:它表明属于struct的所有内容都没有被该函数修改。您的想法的错误是混淆了 p 指向的区域以及 p->x 和 p->y 指向的区域,它们不是结构的一部分。看看我下面的ascii art,你的结构只是画出来的部分,其余的都是不同的。
标签: c constants const-correctness