我不确定为什么这个程序不会编译

B.L*_*.Li 1 c arrays pointers prototype

这是我的计划:

#include<stdio.h>
#define COL 3;

void copy_row(int arr1[][COL], int rows, int arr2[], int r);

void copy_row(int arr1[][COL], int rows, int arr2[], int r){
  int i;
  if(r >= rows || r < 0)
    return;

  for(i = 0; i < COL; i++){
    arr1[r][i] = &arr2[i];
  }
}

int main(void){

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我尝试使用gcc编译它时,它会在"之前"中显示"error:expected']';' 令牌"在第4行和第6行.

另外,参考for循环,将"arr1 [r] [i] = arr2 [i];" 做与"arr1 [r] [i] =&arr2 [i];"相同的事情?哪个(更)正确?

pad*_*ddy 6

COL被扩展为3;,因此在声明和定义中如下所示:

int arr1[][3;]
Run Code Online (Sandbox Code Playgroud)

从你的#define线上删除分号.

另外,参考for-loop,会arr1[r][i] = arr2[i];做同样的事情arr1[r][i] = &arr2[i];吗?

不,第一个是正确的.的左值 arr1[r][i]是指一个整数.的右值 arr2[i]也是整数.

如果你通过take引用它,&arr2[i]那么它的类型就变成了int*,并且是一个指向元素的指针i,你试着将它赋给一个类型的左值int.如果您尝试这样做,您的编译器应该警告您.