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

Giải thích mảng con trỏ (array of pointers) trong ngôn ngữ C


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ời gian thực thi nhanh hơn do truy cập trực tiếp vị trí bộ nhớ.
  • Với con trỏ, bộ nhớ được truy cập hiệu quả: cấp phát và giải phóng động.
  • Con trỏ dùng với cấu trúc dữ liệu.

Khai báo và khởi tạo con trỏ

Xét câu lệnh:

int qty = 179;

Trong bộ nhớ, biến được biểu diễn như sau:

Giải thích mảng con trỏ (array of pointers) trong ngôn ngữ C

Khai báo con trỏ

Ý nghĩa: 'p' là biến con trỏ giữ địa chỉ biến nguyên khác:

int *p;

Khởi tạo con trỏ

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

Ví dụ: int qty = 175; int *p; p = &qty;

Mảng con trỏ

Là tập hợp các địa chỉ (hoặc tập hợp con trỏ).

Khai báo

datatype *pointername[size];

Ví dụ: int *p[5]; // mảng 5 con trỏ nguyên

Khởi tạo

Dùng '&' cho khởi tạo.

int a[3] = {10, 20, 30}; 
int *p[3], i; 
for (i = 0; i < 3; i++) 
    p[i] = &a[i]; // hoặc p[i] = a + i;

Truy cập

Toán tử gián tiếp (*) dùng để truy cập.

for (i = 0; i < 3; i++) 
    printf("%d", *p[i]);

Chương trình ví dụ

Chương trình mảng con trỏ:

#include <stdio.h> 
main() { 
    int a[3] = {10, 20, 30}; 
    int *p[3], i; 
    for (i = 0; i < 3; i++) 
        p[i] = &a[i]; 
    printf("Phần tử mảng:\n"); 
    for (i = 0; i < 3; i++) 
        printf("%d\t", *p[i]); 
}

Kết quả

Phần tử mảng: 10 20 30

Ví dụ 2

Chương trình mảng con trỏ trỏ chuỗi:

#include <stdio.h> 
#include <stdlib.h> 
int main(void) { 
    char *a[5] = {"one", "two", "three", "four", "five"}; 
    int i; 
    printf("Các chuỗi ở vị trí:\n"); 
    for (i = 0; i < 5; i++) 
        printf("%d\n", a[i]); 
    return 0; 
}

Kết quả

Các chuỗi ở vị trí: 
4210688 
4210692 
4210696 
4210702 
4210707