2012-03-16 95 views
-1

我知道,對於交換,將任何作爲參數傳遞的數據更改爲更改數據的函數,在C中,我們實際上需要傳遞數據被改變。對於普通的數據或數組,這很容易,但是當涉及到數組數組時,我陷入了困境,並且感到困惑。使用C語言更改函數列陣(矩陣)的值

在我主我:

int p[20][21]; 
FILE *f; 
f=fopen("intro.txt","rt"); 

m=0; 
n=0; 

while((c=getc(f)) != EOF) 
{ 
    if(c==' ') 
    { 
     p[m][n]=0; 
     n++; 
    } 
    else if(c=='^') 
    { 
     pa[m][n]=5; 
     n++; 
    } 
    else if(c=='*') 
    { 
     p[m][n]=1; 
     n++; 
    } 
    else if(c=='#') 
    { 
     p[m][n]=-1; 
     m++; 
     n=0; 
    } 
} 

的代碼塊是創造我的矩陣,根據我的txt文件。在我的項目中,這是初始化將在以後使用的矩陣的步驟。

創建我的矩陣後,我需要改變我的矩陣各個崗位的一些值,比如:

p1m=0; 
p1n=0; 

p2m=19; 
p2n=20; 

p[p1m][p1n]=5; 
p[p2m][p2n]=5; 

但我必須這樣做,在一個函數中,我的矩陣傳遞給函數,並在我的主要內容中更改我的矩陣。

我試着設置參數的功能:

void myfunc(int* p[20][21]) 

和訪問它的主像:

(myfunc &p[20][21]) 

或者

void myfunc(int** p[20][21]) 

但我想我沒有以正確的方式去做。

回答

2

這樣說:

void myfunc(int p[20][21]) 
{ 
    p[2][3] = 8; // for example 
} 

用法:

int main() 
{ 
    int p[20][21]; 
    myfunc(p); 
    return p[2][3]; 
} 
+0

是的,我正是這樣做,在一些矩陣元素上分配新的值,但是,在一個函數上調用main函數,就像myfunc(p20)[21])不起作用C. – 2012-03-16 14:53:49

+0

@CristiCimpean:你可以調用'myfunc(p);'。讓我編輯它。 – 2012-03-16 14:56:19

+0

可愛。我現在感到很蠢。謝謝你們倆。 – 2012-03-16 15:03:16

0

由於Kerrek指出的那樣,你可以簡單地在數組名傳遞所有的本身。與普通數組沒有區別。

當你編譯時,在內核中,數組'p'被分配一個地址,並且調用p,它使用該地址。它有點像一個指針。所以,如果你想丁克周圍的功能,甚至是二維數組的一個數組裏面,你可以簡單地調用:

int myArray[x]; 
int my2DArray[x][y]; 
myfunc(myArray, my2DArray); 

功能是給出了兩個地址,它是由函數知道如何正確的交互與他們背後的數據。