Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Khác biệt giữa const int*, const int* const, và int const* trong C


Con trỏ (Pointer)

Trong C, *p là giá trị tại con trỏ, p là địa chỉ.

const int* và int const*: con trỏ trỏ đến int hằng, giá trị int không thể thay đổi. Nhưng con trỏ có thể trỏ đến int hằng khác.

const int* const: con trỏ hằng trỏ đến int hằng. Cả con trỏ và giá trị đều không thể thay đổi.

Quy tắc: Đọc từ phải sang trái.

// con trỏ hằng trỏ đến int hằng
const int * const

// con trỏ trỏ đến int hằng
const int *

Ví dụ (C)

Bỏ comment các dòng lỗi để xem lỗi biên dịch.

#include <stdio.h>

int main() {
    // Ví dụ: int const* (tương đương const int*)
    const int p = 5;
    int const* q = &p;  // q trỏ đến int hằng

    // *q = 7; // LỖI: assignment of read-only location '*q'

    const int r = 7;
    q = &r;  // OK: q trỏ đến int hằng khác
    printf("%d", *q);

    // Ví dụ: const int* const
    int const* const s = &p;
    // *s = 7; // LỖI: không thay đổi giá trị
    // s = &r; // LỖI: không thay đổi con trỏ

    return 0;
}

Kết quả đầu ra

7