【发布时间】:2013-01-21 16:10:44
【问题描述】:
以下 C 代码给出错误:
incompatible types in assignment of ‘int’ to
‘int [(((sizetype)(((ssizetype)m) -1)) 1)]’
在我调用递归函数的那一行:
int mergeSort(int arr[], int n)
{
if (n > 1) {
int m = (int)(n / 2);
int A1[m]; // array 1 --> 1 TO M
int A2[n-m]; // array 2 --> M + 1 TO N
int temp = m+1;
for (int i = 0; i < n; i++) {
if (i == m) break;
A1[i] = arr[i];
A2[i] = arr[temp++];
}
A1 = mergeSort(A1, m); //error happens here, assigning an
//integer into an integer array.
A2 = mergeSort(A2, n - m);
arr = merge(A1, A2);
}
return arr;
}
这个错误是什么意思?
【问题讨论】:
-
您的函数返回一个
int,但您将返回值分配给int[]。你想做什么? -
无论如何,这是 C,而不是 C++,因为 C++ 不允许动态大小的数组(
m在您的情况下是运行时值)。 -
如果它被标记为c++,我认为它是标准C之前的非标准C++。
-
@Angew 修正了可怕的语法,修正了更糟糕的格式,重新标记。
-
@H2CO3 你凭什么重新标记?如果他问的是 C++,给他一个 C 的答案对他没有帮助。 (实际上,对于 C 来说,唯一真正的答案是迁移到 C++。在 C 中做这样的事情需要真正的专家;你要么必须就地完成工作,要么必须处理动态分配。)跨度>