我只是有一個關於函數中數組的基本問題。 我想改變一個函數中的數組而不返回它。 我知道如何做到這一點整數或雙打,但我不知道如何做到這一點的陣列。所以我嘗試了一下,現在我很困惑。更改數組而不返回它[C]
我有我的代碼的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'中的堆棧中的數組分配了內存。所以你需要做的就是填寫數值。 – user3386109
'vector = malloc(3 * sizeof(int));'用一個指向新的,不相關的內存塊的指針覆蓋'vector'參數。如果你想填充原始'vector'指向的內存,不要扔掉那個指針。 =) – Ryan