2017-11-14 8 views
0

int main()のグローバル変数として定義されているのは、a[][]の行列です。変数を初期化していません。Cの行列:関数はローカル変数を共有していますか?

そして私はいくつかの機能を使用する:

  • 最初のもの:適切な範囲内の全てのiとjの引数として行列aを受信し、特定の値(ランダム)としてa[i][j]を定義し、この。この関数は単に1を返します。

  • 第2のもの:行列aを引数として受け取り、単純に出力します。また、この関数は単に1を返します。

  • 最後:引数行列aとして受信し、単純に、私は考え

値の値とリターンの最大値を決定するためにいくつかのポインタを定義せずにはっきりコードを書きます行列の変数をすべての関数からグローバルかつ共有可能にするために、コードは単純に機能しませんでした。しかし、それは働いた。 私はグローバルな方法で行列を定義していないので、それはうまくいかないと思っていましたが、関数内でだけがと定義されていて、(私にとって:)他の関数に渡すふりをしています。

私の質問は:なぜそれが働いたのですか?

コード:

int matrix_definition(int a[][], int dim); 
int matrix_print(int a[][], int dim); 
int max_matrix(int a[][],int dim); 

int main() 
{ 
    int a[][], dim; 

    matrix_definition(a,dim); 
    matrix_print(a,dim); 

    printf("%d", max_matrix(a,dim)); 
    return 0; 
} 

メイン()とmatrix_definitionを含む完全なコードはこれです:あなたが投稿

#include<stdio.h> 

#define SIZE 100 


    int matrix_definition(int a[SIZE][SIZE], int dim); 
    int matrix_print(int a[SIZE][SIZE], int dim); 
    int max_matrix(int a[SIZE][SIZE],int dim); 

    int main() 
    { 
     int a[SIZE][SIZE], dim; 

     matrix_definition(a,dim); 
     matrix_print(a,dim); 

     printf("%d", max_matrix(a,dim)); 
     return 0; 
    } 

int matrix_definition(int a[SIZE][SIZE],int dim) 
{ 
int i,j; 
srand(time(NULL)); 

for(i=0;i<dim;i++) 
    { 
     for(j=0;j<dim;j++) 
      { 
       a[i][j]=rand()%2; 
      } 
    } 
return 1; 
    } 
+0

未定義の動作へようこそ。マシンをクラッシュせずに未定義のメモリゾーンに書き込むことができるなら、おそらくそれを読み取ることができます... –

+6

このコードはまったくコンパイルしないでください。 – dbush

+0

'私はint main()'でグローバル変数として定義しましたが、そうしませんでした。 –

答えて

1

更新されたコードは、最初に掲示するものと非常に異なるです。はい、そのコードはどのようにaが定義されているか、さまざまな機能にどのように渡されるかに関して有効です。

int a[SIZE][SIZE] 

パラメータとして配列はポインタに変換されているので、これはと同等です:

int (*a)[SIZE] 

これは、定義された変数と互換性がありますが、パラメータを宣言し、あなたの関数宣言のそれぞれにおいて

in main

int a[SIZE][SIZE]; 

配列を関数に渡すと、最初の要素へのポインタに減衰します。だから、この関数呼び出し:

matrix_definition(a,dim); 

は同じです:int [SIZE]を入力した

matrix_definition(&a[0],dim); 

表現a[0]、そう表現&a[0]int (*)[SIZE]型を持ちます。これは、関数のパラメータと同じです。

関連する問題