这里的基本技巧是C语言中的这个恒等式:
*(a+i) == a[i]
好的,现在我会使这段内容变得易读。
这里的问题是:数组名不是左值,因此不能对其进行赋值。因此,您目前的那行代码
a = arrayGen(...)
问题所在。请参考以下示例:
int main() {
int a[10];
a = arrayGen(a,9);
return 0;
}
这会导致编译错误:
gcc -o foo foo.c
foo.c: In function 'main':
foo.c:21: error: incompatible types in assignment
Compilation exited abnormally with code 1 at Sun Feb 1 20:05:37
你需要一个指针,它是一个左值,用来分配结果。
例如,下面的代码:
int main() {
int a[10];
int * ip;
ip = a ;
ip = arrayGen(ip,9);
return 0;
}
编译通过:
gcc -o foo foo.c
Compilation finished at Sun Feb 1 20:09:28
请注意由于顶部的标识,如果您愿意,可以将ip视为一个数组,就像在这段代码中一样:
int main() {
int a[10];
int * ip;
int ix ;
ip = a ;
ip = arrayGen(ip,9);
for(ix=0; ix < 9; ix++)
ip[ix] = 42 ;
return 0;
}
完整示例代码
为了完整起见,这是我的完整示例:
int gen(int max){
return 42;
}
int* arrayGen(int arrAddr[], int maxNum)
{
int counter=0;
while(arrAddr[counter] != '\0') {
arrAddr[counter] = gen(maxNum);
counter++;
}
return arrAddr;
}
int main() {
int a[10];
int * ip;
int ix ;
ip = a ;
ip = arrayGen(ip,9);
for(ix=0; ix < 9; ix++)
ip[ix] = 42 ;
return 0;
}