为什么我会收到此错误? int之前的预期表达

时间:2018-02-12 08:44:07

标签: c

我目前遇到的问题是在C中找到方形矩阵的转置。我使用的算法是创建一个二维数组来存储我想要找到的转置矩阵。然后我调用一个实际转换它的函数(因为数组通过引用传递),以便在调用函数后它被转置。 该函数的代码如下: -

//transpose of n by n matrix
#include<stdio.h>
void transpose(int arr[int][int]); //prototype declaration line 3
void transpose(int arr[int r][int c]){ //line 4
    int i,j;
    int matB[c][r];
    for(i=0;i<c;i++){
        for(j=0;j<r;j++){
            matB[i][j]=arr[j][i];
        }
    }
    for(i=0;i<r;i++){
        for(j=0;j<c;j++){
            arr[i][j]=matB[i][j];
        }
    }
}
int main(){
    int n,i,j;
    printf("enter the dimensions of square matrix :-");
    int mat[n][n];
    scanf("%d",n);
    printf("please enter the elements of the matrix :-->\n");
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            scanf("%d",&mat[i][j]);
        }
    }
    transpose(mat);
    printf("the transpose of the given matrix is:- \n ");
    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            printf("%d\t",mat[n][n]);
        }
        printf("/n");
    }
}  

但我收到以下错误: -

  

第3行: - [错误]预期表达式&#39; int&#39;
  第4行: - [错误]预期表达式&#39; int&#39;

第3行和第4行对应函数void()的原型声明和函数定义,如代码所示

我目前正在使用DEV C ++作为编译器.. 我的节目快照: - click here to see the snapshot of my program

这里&#39;编译时得到的错误: - click here to see the scanpshot of error i got

2 个答案:

答案 0 :(得分:2)

上面的代码段有两个问题。

  1. 关于函数参数的语法错误。你不能在方括号内传递参数类型。
  2. 必须有一个常量列大小与参数列表中的数组一起传递。
  3. 你可以这样做。

    #define R 10
    #define C 100
    void transpose(int arr[][C]); // prototype declaration line 2
    void transpose(int arr[][C]) { // line 3
        int i, j;
        int matB[C][R];
        for (i = 0; i<C; i++) {
            for (j = 0; j<R; j++) {
                matB[i][j] = arr[j][i];
            }
        }
        for (i = 0; i<R; i++) {
            for (j = 0; j<C; j++) {
                arr[i][j] = matB[i][j];
            }
        }
    }
    

答案 1 :(得分:1)

将是

#define R 10
void transpose(int (*arr)[R]); // prototype declaration line 2

void transpose(int arr[][R]); // prototype declaration line 2

R应该是一个常数。如果不是C99

void transpose(int r,int c, int (*arr)[r]){ // This will work as prototype 

然后

void transpose(int r,int c, int (*arr)[r]){ 
    ....
}

更清晰易用

void transpose(int r,int c, int arr[c][r]){

如果您不理解,请记住2d数组(数组数组)转换为指向第一个元素的指针 - 第一个元素是一个数组,因此指向第一个元素的指针将是int (*)[]。从那时起,早期的解决方案就来了。

例如,为了澄清先前的想法 - 传递单维数组也同样如此。假设你有这个功能,

int a[10];
f(a);

...

void f(int a[])
or 
void f(int *a)

事情也在这里,第一个元素的衰变发生了。这只不过是int*