У меня есть структура, которая содержит несколько указателей. Я хочу, чтобы их значение было неизменяемым. Но простое написание const впереди не делает элементы структуры неизменяемыми.
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
}
Может ли кто-нибудь указать мне в правильном направлении.
РЕДАКТИРОВАТЬ:
Таким образом, может показаться, что нет простого способа использовать прототип функции, чтобы сказать, что все, что принадлежит структуре, должно быть немодифицируемым.
int
s? Тогдаconst int *x;
означает, что вы не можете изменить указанное значение через этот указатель. Указатели? Затемint * const x;
запрещает изменять указатели. - person Daniel Fischer   schedule 01.11.2012const int *x;
в определении структуры. Обратите внимание, что значения в массиве все еще могут быть изменены с помощью других указателей (которые могут вызвать неопределенное поведение, еслиx
указывает на элементconst int arr[3] = { 15, 7, 3 };
или около того). - person Daniel Fischer   schedule 01.11.2012int *x
это не массив, это указатель. Если бы вы объявилиint x[20]
, то массив был бы частью областиconst
ed. Ноx
является указателем, и егоconst
ness не зависит отp
. - person Patrick Schlüter   schedule 01.11.2012const
делает именно это: он говорит, что все, что принадлежит этомуstruct
, не изменяется этой функцией. Ошибка вашего мышления состоит в том, что вы путаете области, на которые указывает p, и области, на которые указывают p-›x и p-›y , они не являются частью структуры. Посмотрите на мой ascii-арт ниже, ваша структура - это только нарисованная часть, остальное отчетливо. - person Patrick Schlüter   schedule 01.11.2012