[英]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.