【发布时间】:2022-01-22 16:15:59
【问题描述】:
编辑:(已解决)我重写了解决问题的 cmets:
- “指针不是数组。如果您实际上有一个数组,但您没有,您只能在声明期间初始化数组,而不是在运行时分配给它们”。
- “这是无效的C。你需要A.data[0] = 1; A.data[1] = 42; etc.”
当然,还有公认的答案。
(免责声明:忽略 mat_constr 函数,因为它与这个问题无关(它是我发布的另一个问题的 mat_constructor,因为我正在尝试自己编辑 mat_transpose 函数);mat_constr 通过采用矩阵变量、行和列的地址)。
void mat_constr(struct matrix* m, size_t rows, size_t cols) {
m->rows = rows; m->cols = cols;
m->data = calloc(rows * cols, sizeof(double));
}
// and, of course, mat_destroy to free the allocated memory.
void mat_destroy(struct matrix* m) {
free(m->data);
}
这是一个非常简单的练习,但我不知道如何(正确地)定义一个数组。
我有一个
struct matrix {
size_t rows;
size_t cols;
double* data
};
在主函数中,我必须定义一个“结构矩阵”类型的变量,然后我必须定义数组。如下:
int main(void) {
struct matrix A;
mat_constr(&A, 4, 4);
A.data = { /* a number */, /* another number* /, /* etc. */ };
}
问题在于编译器突出显示了第一个“{”。在数组定义中,它说:“期望一个表达式”。 这很奇怪,因为这是数组的定义样式,我错了吗?
【问题讨论】:
-
指针不是数组。如果您实际上有一个数组,而您没有,您只能在声明期间初始化数组,而不是在运行时分配给它们。您的问题的答案是在您的 C 书籍中研究数组和指针的基础知识 - 您不能通过猜测语法来编程。