2015-11-01 78 views
0

所以我工作的學校代碼,但我需要一些幫助理解這種結構和類型定義正在創建我可以幫助解釋這段代碼嗎?

struct matrix_2D_struct { 
    int** data_arr; 
    int rows; 
    int cols; 
}; 
typedef struct matrix_2D_struct * matrix_ptr; 

這是定義類型matrix_2D_struct的結構包含一個指向一個int類型的指針稱爲data_arr,稱爲行的int,以及稱爲cols的int?

也我不明白最後一行。我知道它定義了一些東西並給它一個matrix_ptr的標籤,但它是否將結構的別名定義爲一個指針?我不確定如何解釋。

另外,我可以使用calloc將data_arr定義爲2維數組嗎?

謝謝你的時間。

回答

1

有時你看到一些定義是這樣的:

unsigned long long var; 

如果你的程序有unsigned long long很多它變得太繁瑣。走在它通過定義基礎上,使用類型定義一個新的類型,因爲這例如縮短:

typedef unsigned long long ULL; 

現在你只寫ULL變種;

與結構同樣的事情,而不是每次都struct dummy var寫你定義使用的typedef這樣的基礎上struct dummy一個新的類型:

typedef struct dummy DUMMY; 

DUMMY myVar; // the type of myVar is a struct dummy 

同樣的方式與指針,可以定義一個新的類型,它是類型指針,例如:

typedef struct dummy* P_DUMMY; 

P_DUMMY myVarPtr; // the type of myVarPtr is a pointer to struct dummy; 
1

這是定義類型matrix_2D_struct的結構......

我會說一個名爲matrix_2D_struct的類型,它是一個結構體,而不是一個類型的結構體,除此之外是的。

其中包含一個指向int類型指針的指針,稱爲data_arr,int類型稱爲行,int類型稱爲cols?

是的。

我也不明白最後一行。我知道它定義了一些東西並給它一個matrix_ptr的標籤,但它是否將結構的別名定義爲一個指針?

在C中,你通常會傳遞數據作爲指針。有一個重要原因 - 例如,可以將結構化數據傳遞給一個函數,並且該函數可以更改數據的內部(rows,cols,甚至data_arr)。一旦爲一個結構定義了一個類型,你通常會爲該結構的指針定義一個類型。這就是matrix_ptr。你會大概通過這個,而不是matrix_2D_struct

另外,我可以使用calloc定義data_arr爲2維數組嗎?

這個問題有點含糊,但我不明白爲什麼不。我也不明白你爲什麼不能使用malloc()來分配內存。

1

matrix_ptrstruct matrix_2D_struct *的別名。

+0

and struct matrix_2D_struct *是一個指向matrix_2D_struct類型的結構體的指針。 – JustaRedShirt

+0

@JustaRedShirt'struct matrix_2D_struct *'是一個'struct matrix_2D_struct'指針 –

相關問題