【发布时间】:2023-03-28 06:58:01
【问题描述】:
我只是有一个关于函数中数组的基本问题。 我正在尝试更改函数中的数组而不返回它。 我知道如何对整数或双精度数执行此操作,但我不知道如何对数组执行此操作。所以我做了一点实验,现在我很困惑。
我的代码有 2 种变体,我认为它们应该做同样的事情,但它们没有。我将数组 b 传递给函数 Test。在函数中,我尝试用值 0、1、2 填充数组
#include <stdlib.h>
#include <stdio.h>
void Test(int * vector){
vector = malloc(3*sizeof(int));
int i;
for(i=0;i<3;i++){
*(vector+i)=i;
}
}
int main(){
int b[3];
Test(b);
printf("%i\n",b[0]);
printf("%i\n",b[1]);
printf("%i\n",b[2]);
return EXIT_SUCCESS;
}
这个版本不起作用,我没有得到预期的结果 0,1,2 另一方面,此代码似乎确实有效:
#include <stdlib.h>
#include <stdio.h>
void Test(int * vector){
int * b = malloc(3*sizeof(int));
int i;
for(i=0;i<3;i++){
*(b+i)=i;
*(vector+i) = *(b+i);
}
}
int main(){
int b[3];
Test(b);
printf("%i, ",b[0]);
printf("%i, ",b[1]);
printf("%i ",b[2]);
return EXIT_SUCCESS;
}
有人可以向我解释为什么只有第二个有效吗?
最好的问候, 抢
【问题讨论】:
-
for (int i=0;i<3;i++) vector[i]=i;是正确的代码。您已经为main中的堆栈上的数组分配了内存。所以你需要做的就是填写值。 -
vector = malloc(3*sizeof(int));用指向新的、不相关的内存块的指针覆盖vector参数。如果要填充原始vector指向的内存,请不要丢弃该指针。 =)