C 我不知道为什么这个程序不能编译

C 我不知道为什么这个程序不能编译,c,arrays,pointers,prototype,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

这是我的节目:

#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;
}
当我试图用gcc编译它时,它说错误:在“;”之前应该是“].”第4行和第6行的代币

另外,参考for循环,arr1[r][i]=arr2[i];是否执行与arr1[r][i]=&arr2[i];相同的操作;?哪个更正确?

宏列扩展为3;,因此,在您的声明和定义中如下所示:

int arr1[][3;]
从定义行中删除分号

另外,参考for循环,arr1[r][i]=arr2[i];执行与arr1[r][i]=&arr2[i];相同的操作

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

如果您通过使用&arr2[i]引用它,那么它的类型将变为int*,并且是指向元素i的指针,您尝试将其分配给int类型的左值。如果您尝试这样做,编译器应该警告您。

宏列扩展为3;,因此,在您的声明和定义中如下所示:

int arr1[][3;]
从定义行中删除分号

另外,参考for循环,arr1[r][i]=arr2[i];执行与arr1[r][i]=&arr2[i];相同的操作

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


如果您通过使用&arr2[i]引用它,那么它的类型将变为int*,是指向元素i的指针,并且您尝试将其分配给int类型的左值。如果您尝试这样做,编译器应该警告您。

您不希望在该定义行的末尾使用分号。define语句很少(如果有的话)以分号结尾。建议删除尾随分号,那么唯一的编译器消息是:警告:赋值从指针生成整数,而不对此行进行强制转换:arr1[r][i]=&arr2[i];您不希望在define行的末尾使用分号。define语句很少以分号结尾。建议删除尾随分号,那么唯一的编译器消息是:警告:赋值从指针生成整数,而不对此行进行强制转换:arr1[r][i]=&arr2[i];抢手货这是C语句和C预处理器指令之间差异的一个很好的例子。很好的捕获。这是C语句和C预处理器指令之间差异的一个很好的例子。