2017-06-02 99 views
0

我已經創建了一個具有隨機值(0-9)的連續數組,但我不知道如何將它傳遞給打印它的函數。如何在C中傳遞連續數組作爲參數?

現在我只是遍歷主函數內的數組,每當我需要打印它時。但我想爲此提供一個函數,這將使我的代碼更清晰。

的最小碼例子如下:

#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

如果添加爲你'print_arr'功能的原型,你的代碼將工作:http://ideone.com/qMQqtK – mch

+2

或者......移到高於''main'功能print_arr'。基本上,編譯器從上到下解析源文件,並且您需要提供前向聲明,或者在實際使用前移動函數定義*。 –

回答

3

你忘了添加你的函數的聲明(原型)。在C語言中,默認情況下,函數的返回類型爲int類型。但對於您的print_arr()函數,返回類型爲void。所以,你會得到衝突類型錯誤。

因此,聲明print_arr()函數高於main()函數。像:

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

你以前沒有主聲明print_arr功能,所以它無法找到它。休息工作順利。

+0

gcc或g ++編譯器 –