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

Các phép toán con trỏ và vấn đề với con trỏ trong C


Con trỏ là biến có giá trị là địa chỉ của một biến khác, tức là địa chỉ trực tiếp của vị trí bộ nhớ. Giống như bất kỳ biến hoặc hằng số nào, bạn phải khai báo con trỏ trước khi dùng để lưu địa chỉ biến.

Xét câu lệnh sau:

int qty = 179;

Biểu diễn biến trong bộ nhớ:

Các phép toán con trỏ và vấn đề với con trỏ trong C

Khai báo con trỏ như sau:

int *p;

Ý nghĩa: 'p' là biến con trỏ lưu địa chỉ của một biến nguyên khác.

Toán tử địa chỉ (&) dùng để khởi tạo con trỏ.

Ví dụ:

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

Các phép toán con trỏ và vấn đề với con trỏ trong C

Để truy cập giá trị biến, dùng toán tử gián tiếp (*).

Ví dụ:

Các phép toán con trỏ và vấn đề với con trỏ trong C

'*' có thể hiểu là giá trị tại địa chỉ.

Hai câu lệnh sau tương đương:

p = &qty;
n = *p;
n = qty

Các phép toán con trỏ khác nhau

Các phép toán con trỏ trong C được giải thích dưới đây:

  • Gán - Gán địa chỉ cho con trỏ bằng toán tử & (địa chỉ).

  • Tìm giá trị - Là giải tham chiếu, toán tử * cho giá trị lưu tại vị trí được trỏ tới.

  • Lấy địa chỉ con trỏ - Giống biến khác, con trỏ cũng có địa chỉ và giá trị, dùng toán tử & để tìm con trỏ được lưu ở đâu.

  • Cộng số nguyên vào con trỏ - Dùng + để cộng số nguyên vào con trỏ hoặc con trỏ vào số nguyên. Số nguyên nhân với số byte của kiểu được trỏ tới, kết quả cộng vào địa chỉ gốc.

  • Tăng con trỏ - Là phần tử mảng làm di chuyển đến phần tử tiếp theo.

  • Trừ số nguyên từ con trỏ - Dùng - (trừ) để trừ số nguyên từ con trỏ. Số nguyên nhân với số byte kiểu trỏ tới, kết quả trừ từ địa chỉ gốc.

  • Giảm con trỏ - Giảm con trỏ trỏ đến vị trí trước đó, có thể dùng tiền tố/hậu tố.

  • Trừ hai con trỏ - Tìm hiệu hai con trỏ, thường dùng để biết khoảng cách các phần tử.

  • So sánh - Dùng toán tử quan hệ so sánh giá trị hai con trỏ.

Ví dụ

Chương trình minh họa hoạt động các phép toán con trỏ:

#include <stdio.h>
main() {
    int x, y;
    // Khai báo con trỏ
    int *p;
    clrscr();
    x = 10;
    // Gán giá trị cho con trỏ
    p = &x;
    y = *p;
    printf("Gia tri x = %d", x);
    printf("x luu tai dia chi %u", &x);
    printf("Gia tri x bang con tro = %d", *p);
    printf("Dia chi x bang con tro = %u", p);
    printf("Gia tri x trong y = %d", y);
    *p = 25;
    printf("bay gio x = %d", x);
    getch();
}

Kết quả

Khi chạy chương trình, kết quả như sau:

Gia tri x = 10
x luu tai dia chi = 5000
Dia chi x bang con tro = 10
Dia chi x bang con tro = 5000
Gia tri x trong y = 10
Bay gio x = 25