我有以下问题。函数printMatrix
例如接收矩阵:
matrix:
[[0,1,1,2],
[0,5,0,0],
[2,0,3,3]]
我必须使用的代码如下:
// Definition for arrays:
// typedef struct arr_##name {
// int size;
// type *arr;
// } arr_##name;
//
// arr_##name alloc_arr_##name(int len) {
// arr_##name a = {len, len > 0 ? malloc(sizeof(type) * len) : NULL};
// return a;
// }
//
//
void printMatrix(arr_arr_integer matrix)
{
}
作为提示,他们告诉我可以通过以下方式确定列和行的数量。
int columns = matrix.arr->size; //No.columns
int rows = matrix.size; //No.rows
//Or
int columns = matrix.arr[0].size; //No.columns
int rows = matrix.size; //No.rows
我的问题在于如何编写其余代码,以便前面的曲目可以正常工作?
也就是说,要在printMatrix
函数中起作用
您应该在代码中添加或修改什么才能使上述方法起作用?
typedef struct arr_arr_integer {
int size;
type *arr;
} arr_arr_integer;
arr_arr_integer alloc_arr_arr_integer(int len) {
arr_arr_integer a = {len, len > 0 ? malloc(sizeof(type) * len) : NULL};
return a;
}
void printMatrix(arr_arr_integer matrix)
{
int columns = matrix.arr->size; //No.columns
int rows = matrix.size; //No.rows
//print matrix?
}
int main(int argc, char const *argv[])
{
//input matrix?
printMatrix(arr_arr_integer matrix)
return 0;
}
我重复一遍。我必须严格使用此代码
int columns = matrix.arr->size; //No.columns
int rows = matrix.size; //No.rows
问题是当我尝试使用这些音轨时,出现以下编译错误。
error: request for member 'size' in something not a structure or union
答案 0 :(得分:0)
函数alloc_arr_integer
分配一维整数数组。
如果需要2D数组,则必须多次调用该函数。
类似的东西:
arr_integer my2Darray[rows];
// Create the 2D array
for (int i = 0; i < rows; ++i)
{
my2Darray[i] = alloc_arr_integer(columns);
assert(my2Darray[i].arr != NULL);
}
// Initialize the 2D array
for (int i = 0; i < rows; ++i)
{
for (int j = 0; j < columns; ++j)
{
my2Darray[i].arr[j] = i * 1000 + j;
}
}
将它们放在一起:
int main(void)
{
int rows = 3;
int columns = 5;
arr_integer my2Darray[rows];
// Create the 2D array
for (int i = 0; i < rows; ++i)
{
my2Darray[i] = alloc_arr_integer(columns);
assert(my2Darray[i].arr != NULL);
}
//Initialize the 2D array
for (int i = 0; i < rows; ++i)
{
for (int j = 0; j < columns; ++j)
{
my2Darray[i].arr[j] = (i + 1) * 1000 + j;
}
}
for (int i = 0; i < rows; ++i)
{
for (int j = 0; j < columns; ++j)
{
printf("%d ", my2Darray[i].arr[j]);
}
printf("\n");
}
return 0;
}
输出
1000 1001 1002 1003 1004
2000 2001 2002 2003 2004
3000 3001 3002 3003 3004
答案 1 :(得分:0)
我假设“矩阵”的内存分配是在其他地方完成的。
void printMatrix(arr_arr_integer matrix)
{
int rows = matrix.size;
int columns = matrix.arr.size;
int i, j = 0;
/*print array*/
for (i = 0; i < rows; i++)
{
for (j = 0; j < columns; j++)
printf("%d ", a.arr[i].arr[j]);
printf("\n");
}
}