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

时间:2016-10-10 01:09:23

标签: 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;
}

当我尝试用gcc编译它时,它会说&#34;错误:期望&#39;]&#39;之前&#39;;&#39;令牌&#34;在第4行和第6行。

另外,参考for循环,将&#34; arr1 [r] [i] = arr2 [i];&#34;和&#34; arr1 [r] [i] =&amp; arr2 [i];&#34;?哪个(更)正确?

1 个答案:

答案 0 :(得分:6)

$_.StreetAddress -replace "`r?`n","|" 已扩展为COL,因此您的声明和定义内容如下所示:

3;

int arr1[][3;] 行中删除分号。

  

另外,请参阅for循环,#definearr1[r][i] = arr2[i];做同样的事情吗?

没有。第一个是正确的。 左值 arr1[r][i] = &arr2[i];是指整数。 rvalue arr1[r][i]也是一个整数。

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