Con trỏ là một biến lưu trữ địa chỉ của một biến khác.
Tính năng của con trỏ
- Con trỏ tiết kiệm dung lượng bộ nhớ.
- Thời gian thực thi của con trỏ nhanh hơn do có quyền truy cập trực tiếp vào vị trí bộ nhớ.
- Với sự trợ giúp của con trỏ, bộ nhớ được truy cập hiệu quả, tức là bộ nhớ được cấp phát và phân bổ động.
- Con trỏ được sử dụng với cấu trúc dữ liệu.
Khai báo, khởi chạy và truy cập con trỏ
Hãy xem xét tuyên bố sau -
int qty = 179;
Trong bộ nhớ, biến có thể được biểu diễn như hình dưới đây -
Tuyên bố
Khai báo một con trỏ có thể được thực hiện như hình dưới đây -
Int *p;
Nó có nghĩa là ‘p’ là một biến con trỏ giữ địa chỉ của một biến số nguyên khác.
Khởi tạo
Toán tử địa chỉ (&) được sử dụng để khởi tạo một biến con trỏ.
Ví dụ:
int qty = 175; int *p; p= &qty;
Truy cập một biến thông qua con trỏ của nó
Để truy cập giá trị của biến, toán tử hướng (*) được sử dụng.
Ví dụ
Sau đây là chương trình C để nhân hai ma trận bằng cách sử dụng con trỏ -
#include <stdio.h> #define ROW 3 #define COL 3 /* Function declarations */ void matrixInput(int mat[][COL]); void matrixPrint(int mat[][COL]); void matrixMultiply(int mat1[][COL], int mat2[][COL], int res[][COL]); int main() { int mat1[ROW][COL]; int mat2[ROW][COL]; int product[ROW][COL]; printf("Enter elements in first matrix of size %dx%d\n", ROW, COL); matrixInput(mat1); printf("Enter elements in second matrix of size %dx%d\n", ROW, COL); matrixInput(mat2); matrixMultiply(mat1, mat2, product); printf("Product of both matrices is : \n"); matrixPrint(product); return 0; } void matrixInput(int mat[][COL]) { int row, col; for (row = 0; row < ROW; row++) { for (col = 0; col < COL; col++) { scanf("%d", (*(mat + row) + col)); } } } void matrixPrint(int mat[][COL]) { int row, col; for (row = 0; row < ROW; row++) { for (col = 0; col < COL; col++) { printf("%d ", *(*(mat + row) + col)); } printf("\n"); } } void matrixMultiply(int mat1[][COL], int mat2[][COL], int res[][COL]) { int row, col, i; int sum; for (row = 0; row < ROW; row++) { for (col = 0; col < COL; col++) { sum = 0; for (i = 0; i < COL; i++) { sum += (*(*(mat1 + row) + i)) * (*(*(mat2 + i) + col)); } *(*(res + row) + col) = sum; } } }
Đầu ra
Khi chương trình trên được thực thi, nó tạo ra kết quả sau -
Enter elements in first matrix of size 3x3 2 3 1 2 5 6 2 6 8 Enter elements in second matrix of size 3x3 1 2 1 2 3 4 5 6 7 Product of both matrices is : 13 19 21 42 55 64 54 70 82