主程式的陣列傳遞到函式(基本)

在C語言裡面比較特別的是一般變數(區域變數)在主程式、函式與其他不同的函式式互相部會影響的(除非全域變數),例如主程式宣告的n=5,當其他函式運作時,也有一個叫做n的變數在其函式運作,主程式的n不不會受到影響且內容式不會被改變的,但是陣列較為特殊,主程式的陣列數值n[3]={1,2,3},當函式中有使用到n[3]時,在函式中陣列n[3]改變數值後,會直接改變主程式的n[3],因為在C裡面主程式所宣告的陣列與每個函式中的同樣名稱陣列都是同一個。
例如在main裡面宣告一個陣列叫k[5],賦予陣列k每個位置數值別1,9,2,8,0,呼叫函是帶k陣列值過去,函式若在陣列k的每個位置都加上2,則陣列n[5]為3,11,4,10,2,不需要回傳即會改變主程式的陣列n[5],因為他不是複製,他是同一個
以下是自我練習當範例:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void arraytest(int v[3],int g[3]);
int main(){
srand(time(0));
int i,j,n[3][3]={{1,2,3},{4,5,6},{7,8,9}};
int v[3]={1,2,3};
int g[3]={2,4,6};
arraytest(v,g);
for(i=0;i<3;++i){
for(j=0;j<3;++j){
int r,m,b,k,t;
r=rand()%(9-k)+k;
m=r%3;
b=r/3;
t=n[i][j];
n[i][j]=n[m][b];
n[m][b]=t;
k++;
}
}
for(i=0;i<3;++i){
for(j=0;j<3;++j){
printf("%d ",n[i][j]);
}
printf("\n");
}
for(i=1;i<=3;++i){
printf("v%d= %d\n",i-1,v[i-1]);
}
for(int i=1;i<=3;++i){
printf("g=%d\n",g[i-1]);
}
return 0;
}

void arraytest(int v[3],int g[3]){
for(int j=0;j<3;++j){
v[j]=v[j]+10;//原值加10
g[j]=j+6;//直接賦予新值取代原值
}
}

留言