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
Let's register a Viblo Account to get more interesting posts.