const
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ố
All rights reserved