Dưới đây là các ví dụ mẫu mô tả cách sử dụng const
Struct
#include <stdio.h>
#include <string.h> struct information
{ int d; int m; int y;
}; int main()
{ struct information trieu; struct information * ptr_infor; ptr_infor = &trieu; trieu.d = 1; trieu.m = 4; trieu.y = 2001; printf("trieu: %d-%d-%d\n", trieu.d, trieu.m, trieu.y); // Thay đổi giá trị thông qua con trỏ ptr_infor->d = 2; printf("trieu ptr: %d-%d-%d\n", ptr_infor->d, ptr_infor->m, ptr_infor->y); return 0;
}
Output
trieu: 1-4-2001
trieu ptr: 2-4-2001
- Khi thay đổi
struct information const * ptr_infor;
hoặcconst struct information * ptr_infor;
sẽ gây ra lỗi:
Main.c: In function ‘main’:
Main.c:26:16: error: assignment of member ‘d’ in read-only object 26 | ptr_infor->d = 2; |
Điều này xảy ra là do khi dùng const
ở đây thì nó có ý nghĩa là giá trị của struct do con trỏ này trỏ đến thì không được phép sửa đổi.
- Khi thay đổi
struct information * const ptr_infor;
sẽ gây ra lỗi:
Main.c: In function ‘main’:
Main.c:17:13: error: assignment of read-only variable ‘ptr_infor’ 17 | ptr_infor = &trieu;
Điều này xảy ra khi dùng * const
nghĩa là địa chỉ mà con trỏ ptr_info
trỏ tới không được thay đổi trong quá trình chạy, ta cần phải gán địa chỉ struct ngay lúc khởi tạo.
struct information * const ptr_infor = &trieu;
Kết luận:
struct information * ptr_infor
: con trỏ thay đổi, giá trị struct thay đổi.struct information const * ptr_infor
: con trỏ thay đổi, giá trị struct hằng sốstruct information * const ptr_infor
: con trỏ hằng số, giá trị struct thay đổistruct information const * const ptr_infor
: con trỏ hằng số, giá trị struct hằng số