我想做什么?
我想創建一個struct
型別陣列并將struct
實體插入其中。
{"struct Matrix matrix1", "struct Matrix matrix2"}
到現在為止我做了什么?
我創建了一個函式create_struct()
,它接受必要的引數struct
并回傳一個struct
指標。
typedef struct
{
size_t rows, columns;
int *table;
} mat;
mat *create_struct(int x, int y)
{
mat *data = (mat *)malloc(sizeof(*data));
data->table = malloc(sizeof(int[(x * y)]));
data->columns = y;
data->rows = x;
return data;
}
然后我在這種情況下創建了一個指向物件的指標,struct
并嘗試在 for 回圈和函式struct
的幫助下插入實體。create_struct()
但是這樣做程式會崩潰。
int main()
{
size_t dimensions[2][2] = {{3, 3}, {3, 2}};
mat *matrix;
for (size_t i = 0; i < 2; i )
{
matrix[i] = create_struct(dimensions[i][0], dimensions[i][1]);
}
return 0;
}
我認為主要問題在于這條線。
matrix[i] = create_struct(dimensions[i][0], dimensions[i][1]);
首先,上面會導致編譯錯誤a value of type "mat *" cannot be assigned to an entity of type "mat"
所以為了解決這個問題,我做了這樣的事情。我認為這是完全模糊的。我可能錯了。
matrix[i] = *create_struct(dimensions[i][0], dimensions[i][1]);
我對答案有什么期望
以下應該是重點:
- 有沒有可能做我正在做的事情?
- 有沒有更好的方法或程式將
struct
實體插入struct
型別陣列? - 如果您覺得我缺乏任何概念知識,請提供資訊。
uj5u.com熱心網友回復:
當然。只需為指向的指標分配記憶體,mat
而不是取消參考未初始化的指標matrix
。或者使用指向的指標陣列mat
。
int main()
{
size_t dimensions[2][2] = {{3, 3}, {3, 2}};
mat** matrix = calloc(2, sizeof *matrix);
// OR
// mat* matrix[2];
for (size_t i = 0; i < 2; i )
{
matrix[i] = create_struct(dimensions[i][0], dimensions[i][1]);
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/470455.html
上一篇:來自成員參考的C 結構參考