0

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ặc const 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 đổi
  • struct information const * const ptr_infor: con trỏ hằng số, giá trị struct hằng số

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí