簡體   English   中英

我如何在ANSI C中定義Typedef矩陣

[英]How can I define typedef matrix in ansi c

我有2個.c文件,adj.c和main.c。 我想做的是在adj.c中定義

#define N 12
typedef int adj_mat[N]

並在main.c上使用此typedef作為我試圖定義的二維數組,

adj_mat mat[N];

我的程序中有一個功能,它用零填充此矩陣,定義為:

void fill_mat_zero(adj_mat);

我的問題是,如果我使用Visual Studio運行該程序,就沒有問題,但是如果我嘗試在Ubuntu中進行編譯,它將顯示一個錯誤,如下所示:注意:預期為'int ',但參數的類型為'int( )[ 12]

這里有什么問題? typedef的定義不正確嗎? 有沒有一種方法可以將adn_mat [N]數組定義為typedef,然后再將其用作多維數組?

謝謝。

這個

#define N 12
typedef int adj_mat[N]

adj_mat定義為int類型的12元素數組。

這個

adj_mat mat[N];

mat定義為adj_mat類型的12個元素的數組,這意味着mat實際上是int[12][12] 所以你得到了錯誤。

void fill_mat_zero(adj_mat);

是聲明,而不是定義。 定義具有代碼主體。 想想一個聲明為就像當你進入一國海關申報的-你宣布你有什么事情,但聲明實際上不是那個東西。

從這個問題尚不清楚,例如,是否需要一維數組,就好像它是二維數組一樣,可以對其進行索引

adj_mat[3*row + col]

在這種情況下,您的聲明只會部分進行。 編譯干凈,我從聲明中刪除了[N] ,並在函數參數中添加了一個標識符。

#define N 12
typedef int adj_mat[N];

void fill_mat_zero(adj_mat m) {
    int i;
    for (i=0; i<N; i++)
        m[i] = 0;
}

int main(void){
    adj_mat mat;
    fill_mat_zero(mat);
    return 0;
}

或者,也許您想通過使用adj_mat[]數組將其adj_mat[]

#define N 12
typedef int adj_mat[N];

void fill_mat_zero(adj_mat *m, int size) {
    int i, j;
    for (i=0; i<N; i++)
        for (j=0; j<size; j++)
            m[i][j] = 0;
}

int main(void){
    adj_mat mat[N];
    fill_mat_zero(mat, N);
    return 0;
}

但是,如果要用0填充數組,則使用memset()會更有效。

暫無
暫無

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

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