首先,直接回答你的问题,如果你定义一个矩阵,并希望将其指针存储在一个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