2017-06-02 14 views
0

ランダムな値(0〜9)で連続した配列を作成しましたが、その配列を出力する関数に渡す方法はわかりません。Cでパラメータとして連続配列を渡す方法は?

今は、私はそれを印刷する必要があるときはいつでもmain関数の中の配列を繰り返し処理しています。しかし、私はそのための機能を持っている、それは私のコードクリーナーを作るだろう。

最小限のコード例は以下の通りです:

#include <stdio.h> 
#include <stdlib.h> 

int **alloc_2d_int(int rows, int cols); 

int main(int argc, char** argv){ 
    int **matrix; 
    int i,j,size=3; 
    matrix = alloc_2d_int(size,size); 

    // generate the array 
    for (i=0; i<size; i++) 
    { 
     for (j=0; j<size; j++) 
     { 
      matrix[i][j] = rand() % 10; 
     } 
    } 

    // how I print the array right now 
    for (i=0; i<size; i++) 
    { 
     for (j=0; j<size; j++) 
     { 
      printf("[%d][%d]=%d\n", i,j,matrix[i][j]); 
     } 
    } 

    // this is how I want the printing to happen 
    print_arr(matrix,3); 
} 

int **alloc_2d_int(int rows, int cols) { 
    int *data = (int *)malloc(rows*cols*sizeof(int)); 
    int **array= (int **)malloc(rows*sizeof(int*)); 
    int i; 
    for (i=0; i<rows; i++) 
     array[i] = &(data[cols*i]); 
    return array; 
} 

void print_arr(int **array,int size) 
{ 
    int i,j; 
    for (i=0; i<size; i++) 
    { 
     for (j=0; j<size; j++) 
     { 
      printf("matrix[%d][%d]=%d\n", i,j,array[i][j]); 
     } 
    } 
} 

エラーメッセージ: 'print_arr' の 相反するタイプの[デフォルトで有効になって]

+4

、あなたのコードは動作します:http://ideone.com/qMQqtK – mch

+2

それとも... main''上 'print_arr'機能を移動します。基本的に、コンパイラはソースファイルを上から下に解析します。実際に使用される前に、前方宣言を提供するか、関数定義*を移動する必要があります。 –

答えて

3

関数の宣言(プロトタイプ)を追加していません。 C言語では、デフォルトで関数の戻り値の型はintの型です。しかし、print_arr()関数の場合、戻り値の型はvoidです。したがって、競合型エラーが発生します。

したがって、print_arr()関数はmain()関数の上に宣言してください。同様に:あなたは `print_arr`関数のプロトタイプを追加した場合

void print_arr(int **array,int size); 
1

あなたはそうメインの前にprint_arr機能を宣言していませんそれを見つけることができません。休息はスムーズに行われます。

+0

gccまたはg ++コンパイラ –

関連する問題