2011-12-30 3 views
0

Можно создать дубликат:
How do I pass a reference to a two-dimensional array to a function?как передать двумерный массив символов функционировать с

У меня есть следующие два двумерный массив, и я пытался передать его по ссылке к функция:

char table_[ROWS][COLUMNS];//ROWS AND COLUMNS are constants 

void op_table_(char table_, int ROWS, int COLUMNS) 
    { 
     for(int i=0;i<ROWS;i++) 
      for(int j=0;j<COLUMNS;j++) 
       table_[i][j]=0; 
    } 

, но он не работает

+0

многомерные массивы как параметры функции имеют тонкие различия между C и C++. Вы должны решить, какой из них вы хотите. –

ответ

3

Вот пример:

#define ROWS 10 
#define COLUMNS 10 
char table_[ROWS][COLUMNS];//ROWS AND COLUMNS are constants 

void op_table_(char table_[ROWS][COLUMNS], int rows, int columns) 
{ 
    for(int i=0;i<rows;i++) 
     for(int j=0;j<columns;j++) 
      table_[i][j]=0; 
} 

int main(int argc, char **argv) 
{ 
op_table_(table_, ROWS, COLUMNS); 
} 

Строки и столбцы, очевидно, параметры могут быть опущены и заменены строк и столбцов в теле функции. Чтобы сделать функцию более общей, вы код что-то вроде:

void op_table_(void *table_, int rows, int columns) 
{ 
    for(int i=0;i<rows;i++) 
     for(int j=0;j<columns;j++) 
      *(((char *)table_) + (columns * i) + j) = -1; 
} 
+1

Я вижу это совсем немного, но не понимаю, в чем заключается преимущество использования арифметики указателя над чем-то вроде 'table_ [rows * i + j] = -1;' во втором примере. –

Смежные вопросы