簡體   English   中英

如何在 C 中的 Function 中使用指針(指向矩陣)作為參數?

[英]How to use a pointer (to a Matrix) as an argument in a Function in C?

我正在嘗試在 C 中編寫一個代碼,將兩個 4x4 矩陣相加。 但我希望我的 function 有一個指針作為我的 arguments。 我得到的唯一錯誤是我試圖在 function 中總結的時間。 有人可以幫助我嗎?

#include <stdio.h>
#include <locale.h>

int i = 0, j = 0;

void calc_soma(int* mat_A, int* mat_B, int* mat_C)
{
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 4; j++)
        {
            mat_C[i][j] = mat_A[i][j] + mat_B[i][j];
            printf("%d", mat_C[i][j]);
        }
    }
}

int main()
{
    setlocale(LC_ALL, "Portuguese");

    int i=0, j=0;
    int mA[4][4], mB[4][4], mC[4][4];
    int *mat_A, *mat_B, *mat_C;

    for(i = 0; i < 4; i++)
    {
        for (j = 0; j < 4; j++)
        {
            printf("Type in the value for Matrix A [%d][%d]: ", i, j);
            scanf_s("%d", &mA[i][j]);
        }
    }
    i, j = 0;
    for (i = 0; i < 4; i++)
    {
        for (j = 0; j < 4; j++)
        {
            printf("Type in the value for Matrix B [%d][%d]: ", i, j);
            scanf_s("%d", &mB[i][j]);
        }
    }

    *mat_A = &mA;
    *mat_B = &mB;

    return 0;
}

arguments 的指針類型錯誤。 你想傳遞(指向第一個元素的指針) arrays 像int mA[4][4]; ,所以它們應該是指向int[4]的指針。

void calc_soma(int (*mat_A)[4], int (*mat_B)[4], int (*mat_C)[4])
{
    /* same as original */
}

它們可以簡單地寫成這樣:

void calc_soma(int mat_A[][4], int mat_B[][4], int mat_C[][4])
{
    /* same as original */
}

然后 function 可以這樣調用:

calc_soma(mA, mB, mC);

mat_Amat_B的用途尚不清楚,但如果你想獲得指向&mA之類的矩陣的指針,它應該是int(*)[4][4] 請注意,取消引用(如*mat_A )未初始化的指針將調用未定義的行為

int main()
{
    setlocale(LC_ALL, "Portuguese");

    int i=0, j=0;
    int mA[4][4], mB[4][4], mC[4][4];
    int (*mat_A)[4][4], (*mat_B)[4][4], (*mat_C)[4][4];

    /* omit */

    mat_A = &mA;
    mat_B = &mB;

    return 0;
}

使用類似的功能

void calc_soma(int* mat_A, int* mat_B, int* mat_C)

你應該用一維數組來表達矩陣以匹配格式。 它會是這樣的:

#include <stdio.h>
#include <locale.h>

#define ROWS 4
#define COLS 4

int i = 0, j = 0;

void calc_soma(int* mat_A, int* mat_B, int* mat_C)
{
    for (i = 0; i < ROWS; i++)
    {
        for (j = 0; j < COLS; j++)
        {
            mat_C[i * COLS + j] = mat_A[i * COLS + j] + mat_B[i * COLS + j];
            printf("%d", mat_C[i * COLS + j]);
        }
    }
}

int main()
{
    setlocale(LC_ALL, "Portuguese");

    int i=0, j=0;
    int mA[ROWS * COLS], mB[ROWS * COLS], mC[ROWS * COLS];

    for(i = 0; i < ROWS; i++)
    {
        for (j = 0; j < COLS; j++)
        {
            printf("Type in the value for Matrix A [%d][%d]: ", i, j);
            scanf_s("%d", &mA[i * COLS + j]);
        }
    }
    i, j = 0;
    for (i = 0; i < ROWS; i++)
    {
        for (j = 0; j < COLS; j++)
        {
            printf("Type in the value for Matrix B [%d][%d]: ", i, j);
            scanf_s("%d", &mB[i * COLS + j]);
        }
    }

    calc_soma(mA, mB, mC);

    return 0;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM