【发布时间】:2022-01-04 00:12:31
【问题描述】:
我有以下结构和功能。分配二维数组后,我想返回它,但由于某种原因,我不断收到错误消息:“警告:从返回类型不兼容的函数返回 'int **' 'Array *' {aka 'struct array *'} [ -Wincompatible-pointer-types]"
typedef struct array
{
int n1;
int n2;
int *data;
} Array;
Array *array_create(int n1, int n2)
{
int **arr = malloc(n1 * sizeof(int*));
for (int i = 0; i < n1; i++)
{
arr[i] = malloc(n2*sizeof(int));
}
Array values = {n1, n2, *arr};
return values;
}
为了清楚起见,这里有一些来自 main 函数的代码:
{
Array *arr = array_create(4, 4);
int cnt = 1;
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4; j++) {
array_set(arr, i, j, cnt++);
}
}
【问题讨论】:
-
您声称
array_create将返回Array *。该函数最终返回return arr;。如果我们追溯arr的定义位置,我们会找到int **arr。而int **不是Array *。 -
@Cheatah 请原谅我,我一定是通过输入 return arr 而不是返回值写了一个错误。但是,尽管值是 Array 类型,但在返回它时我仍然遇到相同的错误。
-
@Adele 请发布正确的Minimal, Reproducible Example,详细说明您遇到问题的确切代码。
标签: c function multidimensional-array struct doubly-linked-list