首先,直接回答你的問題,如果你定義一個矩陣,並希望將其指針存儲在一個stru ct,你可以通過直接分配來完成。從您的身體力行上,你可以做一個struct AMessage
點你c
已分配的內存的doublePointer
成員通過這樣的簡單:
struct AMessage am;
am.doublePtr = c;
但是,如果你想創建一個矩陣,其中每行保證與其他行有相同數量的元素,更適合表示這是一個2D數組,而不是指向其他數組的指針數組。
2D陣列用C可以聲明如下所示:
double matrix[ROW][COL];
此聲明瞭一個名爲matrix
可變的,ROW
行和COL
列。
沒有什麼可以阻止你,包括你的struct
定義這個定義直,使你的結構的定義是這樣的:
struct AMessage
{
char MessageId;
double matrix[ROW][COL];
};
(感謝chqrlie的提示這一點)
如果你一定需要一個指向二維數組的指針來存放你的struct
(例如,你可能想要用你的兩個struct
引用一個大數組),你需要知道C中的二維數組真的是一維數組,只能以某種方式解決。
可以動態地分配存儲器將用於使基質與一個調用的malloc:
double *c = malloc(ROW * COL * sizeof(*c));
一個用於在j
列訪問元素的元素的選擇,行i
是:
double a = c[ROW * j + i];
但這顯然有點笨重,真的,通過類似這樣的方式訪問元件i
,j
更方便:
double a = d[j][i];
要定義指針d
,我們可以像這樣解引用,我們需要考慮d[j]
是什麼類型。它並不像許多人認爲的那樣,而是指向一組數字ROW
double
s。在C語法,你將宣佈d
像這樣:
double (*d)[ROW];
最後解決你的問題,我會定義你的結構是這樣的:
struct AMessage
{
char MessageId;
double (*matrix)[ROW];
}
分配到這個struct
會是這個樣子:
struct AMessage am;
am.matrix = malloc(ROW * COL * sizeof(*am.matrix));
am.matrix[j][i] = 42; // Assigns 42 to row j, column i
你試過'xMessage.doublePtr = c;'? – mch