Tôi có cấu trúc chứa một số con trỏ. Tôi muốn giá trị của chúng không thể sửa đổi được. Nhưng chỉ đơn giản là viết const infront không làm cho các thành viên structs unmutableconst tính chính xác cho cấu trúc với con trỏ
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
}
Ai đó có thể chỉ cho tôi đi đúng hướng.
EDIT:
Vì vậy, có vẻ như không có cách nào đơn giản của việc sử dụng các chức năng nguyên mẫu để nói rằng tất cả mọi thứ thuộc về struct nên unmodifiable
Bạn muốn gì không thể sửa đổi? Các chỉ để 'int'? Sau đó 'const int * x;' có nghĩa là bạn không thể sửa đổi giá trị được trỏ tới thông qua con trỏ đó. Các con trỏ? Sau đó 'int * const x;' cấm thay đổi các con trỏ. –
Nếu int * x của tôi, là một mảng, thì tôi muốn các giá trị trong mảng này không thể sửa đổi được. – monkeyking
Sau đó, bạn cần 'const int * x;' trong định nghĩa struct. Lưu ý rằng các giá trị trong mảng vẫn có thể được sửa đổi thông qua các con trỏ khác (có thể gọi hành vi không xác định, nếu 'x' trỏ đến một phần tử' const int arr [3] = {15, 7, 3}; 'hoặc như vậy) . –