2012-03-16 23 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

はい、いくつかの行列要素に新しい値を代入していますが、myfunc(p20)[21]のようにmain関数を呼び出す関数でこれを行うと、 C. –

+0

@CristiCimpean:あなたは 'myfunc(p);'を呼び出します。私はそれを編集させてください。 –

+0

素敵です。今私は愚かな気がする。あなたがた両方に感謝します。 –

0

Kerrekが指摘するように、あなたは、単にすべて自身で配列名を渡すことができます。通常のアレイと変わることはありません。

コンパイル時には、配列 'p'にアドレスが割り当てられ、pが呼び出される場所ではそのアドレスが使用されます。ポインタのように扱われています。あなたは、関数の内部配列の周りDINKしたいのであれば、でも2D配列は、あなたが簡単に呼び出すことができます。

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

を関数は2つのアドレスを与え、それが適切に対話する方法を知っている機能次第ですされます彼らの背後にあるデータと一緒に。

関連する問題