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

Nhân hai ma trận bằng con trỏ trong C


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

Đặc điểm con trỏ

  • Tiết kiệm bộ nhớ.
  • Thực thi nhanh do truy cập trực tiếp ô nhớ.
  • Cấp phát/giải phóng động hiệu quả.
  • Dùng với cấu trúc dữ liệu.

Khai báo, khởi tạo, truy cập con trỏ

Xét: int qty = 179;

Biểu diễn bộ nhớ:

Nhân hai ma trận bằng con trỏ trong C

Khai báo

int *p;

'p' là con trỏ giữ địa chỉ biến int khác.

Khởi tạo

Toán tử & khởi tạo con trỏ.

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

Truy cập biến qua con trỏ

Toán tử * truy cập giá trị.

Ví dụ

Chương trình C nhân hai ma trận bằng con trỏ:

#include <stdio.h> 
#define ROW 3 
#define COL 3 
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], mat2[ROW][COL], product[ROW][COL]; 
    printf("Nhap ma tran thu nhat %dx%d\n", ROW, COL); 
    matrixInput(mat1); 
    printf("Nhap ma tran thu hai %dx%d\n", ROW, COL); 
    matrixInput(mat2); 
    matrixMultiply(mat1, mat2, product); 
    printf("Tich hai ma tran:\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, 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

Kết quả chạy chương trình:

Nhap ma tran 1 3x3: 2 3 1 2 5 6 2 6 8 
Nhap ma tran 2 3x3: 1 2 1 2 3 4 5 6 7 
Tich: 
13 19 21 
42 55 64 
54 70 82