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

Chương trình C minh họa con trỏ (Pointer)


Con trỏ là biến lưu trữ địa chỉ của biến khác.

Đặc điểm con trỏ

  • Tiết kiệm không gian bộ nhớ.
  • Thực thi nhanh do truy cập trực tiếp địa chỉ bộ nhớ.
  • Quản lý bộ nhớ hiệu quả: cấp phát/giải phóng động.
  • Sử dụng với cấu trúc dữ liệu.

Khai báo con trỏ

int *p;

Ý nghĩa: p là biến con trỏ lưu địa chỉ của biến kiểu int.

Khởi tạo con trỏ

Dùng toán tử địa chỉ (&):

int qty = 175;
int *p;
p = &qty;

Chương trình C minh họa con trỏ (Pointer)

Truy cập giá trị qua con trỏ

Dùng toán tử gián tiếp (*):

Chương trình mẫu

#include <stdio.h>

void main() {
    int a = 2;
    int *p;
    
    // Liên kết con trỏ với biến
    p = &a;
    
    // In thông tin
    printf("Kích thước int: %d\n", sizeof(int));        // 4
    printf("Địa chỉ của %d: %p\n", a, (void*)p);       // Địa chỉ
    printf("Giá trị tại %d: %d\n", a, *p);             // 2
    printf("Giá trị địa chỉ tiếp theo: %d\n", *(p+1)); // Giá trị rác
    printf("Địa chỉ tiếp theo: %p\n", (void*)(p+1));   // Địa chỉ +4
    
    // Ép kiểu con trỏ sang char*
    char *p0 = (char*)p;
    printf("\nKích thước char: %d\n", sizeof(char));   // 1
    printf("Địa chỉ (char*): %p\n", (void*)p0);
    printf("Giá trị byte đầu (char*): %d\n", *p0);     // Byte đầu của 2 = 2
    printf("Giá trị byte 2 (char*): %d\n", *(p0+1));   // Byte 2 = 0
    printf("Địa chỉ byte 2: %p\n", (void*)(p0+1));     // Địa chỉ +1
}

Kết quả chạy

Kích thước int: 4
Địa chỉ của 2: 0x61FE1C
Giá trị tại 2: 2
Giá trị địa chỉ tiếp theo: 10818512 (rác)
Địa chỉ tiếp theo: 0x61FE20 (+4 bytes)

Kích thước char: 1
Địa chỉ (char*): 0x61FE1C
Giá trị byte đầu: 2
Giá trị byte 2: 0
Địa chỉ byte 2: 0x61FE1D (+1 byte)