在C中传递矩阵作为参数不起作用

时间:2016-05-11 15:55:45

标签: c

我在函数调用saveFile

中传递矩阵作为参数
void saveFile(char raw[],char inf[],int r, int c, int m[r][c]){

   FILE *save_raw,*save_inf;        
   int i,j;

   save_raw = fopen(raw,"w");
   save_inf = fopen(inf,"w");

    for(i=0;i<r;i++){
       for(j=0;j<c;j++){
           fprintf(save_raw,"%d ",m[i][j]);     
       }

       fprintf(save_raw,"\n");
    }

我正在调用这样的函数

saveFile(image_name_extension,image_name_info,rows,columns,raw_n);

在调用函数之前,raw_n的输出是:

0 132 132 246 237
0 223 132 246 237
0 132 132 246 237
230 132 132 246 237
0 166 142 246 248

但由于某种原因,我现在不在saveFile函数中输出raw_n:

0 132 132 246 237
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0

我不是一个合乎逻辑的问题,任何人都可以帮助我吗?感谢。

raw_n像这样填充

for(i=0;i<rows;i++){
    for(j=0;j<columns;j++){
        raw_n[i][j] = MAX_PIXEL - raw[i][j];
    }
}

1 个答案:

答案 0 :(得分:3)

在评论中,您同意传递的数组的定义与

类似
int n_raw[MAX_ROWS][MAX_COLS];

两个维度均为500.但您已将该函数定义为

void saveFile(char raw[],char inf[],int r, int c, int m[r][c])
带有参数r = 5c = 5

。该函数相信您所说的内容,并且错误地访问了数组。函数关于数组的唯一信息是函数参数中的内容。数组未重新排列以适合您要访问的子集。关键信息是数组中的列数,没有这些列,编译器就无法对齐每一行。

我建议你将功能定义改为

void saveFile(char raw[],char inf[],int r, int c, int m[MAX_ROWS][MAX_COLS])

甚至

void saveFile(char raw[],char inf[],int r, int c, int m[][MAX_COLS])