2012-03-16 94 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); 

功能是给出了两个地址,它是由函数知道如何正确的交互与他们背后的数据。