C中的多维数组原型错误

时间:2014-09-29 19:07:37

标签: c function multidimensional-array function-prototypes

我在使用以下代码时遇到了一些问题。 它是一个函数将一个多维数组的内容复制到另一个。 代码如下:

#include<stdio.h>
void copyarray(int ros,int cos,double ard[][cos] ,double arf[][cos]);
int main(){
    int rows,columns;
    printf("Enter number of rows\n ");
    scanf("%d",&rows);
    printf("Enter number of columns\n");
    scanf("%d",&columns);
    double ar[rows][columns];
    double ar1[rows][columns];
    printf("Enter the elements ");
    for(int i=0;i<rows;i++){
  for(int j=0;j<columns;j++){
      scanf("%lf",&ar[i][j]);
  }
    }
    printf("The 2d array is :\n");  

    for(int i=0;i<rows;i++){
  for(int j=0;j<columns;j++){
            printf("%lf ",ar[i][j]);        
  }
  printf("\n");
    }
    copyarray(rows,columns,ar,ar1); 
    return 0;
}

void copyarray(int r,int c,double ar[r][c],double arr1[r][c]){  
    for(int j=0;j<r;j++){
  for(int i=0;i<size;i++){
      arr1[j][i]=ar[j][i];
  }
    }
    printf("The new array has the following elements:\n");
    for(int j=0;j<r;j++){
  for(int i=0;i<size;i++){
      printf("%lf ",arr1[j][i]);
  }
  printf("\n");
    }
}

我收到以下错误:

&#34;使用参数&#39; cos&#39;外部职能机构&#34;

有人可以帮我解决这个问题吗? 谢谢

2 个答案:

答案 0 :(得分:2)

你有

void copyarray(int ros,int cos,double ard[][cos] ,double arf[][cos]);

哪个是

type function_name(type arg_name_1,
                   type arg_name_2,
                   type array_name_1[][arg_name_2],
                   type array_name_2[][arg_name_2]);

在C99之前,您不能在函数声明中使用参数(在本例中为arg_name_2)。该错误指的是在array_name_2[][arg_name_2]中使用它作为&#34;在函数体之外&#34;。

但是,如HostileFork所述,如果您使用符合C99标准(或更高版本)的编译器,则可以执行此操作。

答案 1 :(得分:0)

你有两倍ard[][cos], double arf[][cos]

您需要double *ard, double *arf

因为c语言永远不会通过值传递数组,只能通过链接传递

你可以按价值传递结构,但这是另一个故事

#include <stdio.h>

void fill(int *a)
{
        int i, j;
        for (i = 0; i < 10; i++) {
                for (j = 0; j < 10; j++) {
                         a[i * 10 + j] = i + j;
                }
        }
}
void print(int *a)
{
        int i, j;
        for (i = 0; i < 10; i++) {
                for (j = 0; j < 10; j++) {
                        printf("%2d ", a[i * 10 + j]);
                }
                printf("\n");
        }
}

int main(int argc, char *argv[])
{
        int arr[10][10];
        fill(&arr[0][0]);
        print(&arr[0][0]);
        return 0;
}

可能不是很漂亮,但很明显实际上是什么使编译器