这是我的计划:
#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;?哪个(更)正确?
答案 0 :(得分:6)
宏$_.StreetAddress -replace "`r?`n","|"
已扩展为COL
,因此您的声明和定义内容如下所示:
3;
从int arr1[][3;]
行中删除分号。
另外,请参阅for循环,
#define
与arr1[r][i] = arr2[i];
做同样的事情吗?
没有。第一个是正确的。 左值 arr1[r][i] = &arr2[i];
是指整数。 rvalue arr1[r][i]
也是一个整数。
如果您通过arr2[i]
引用它,那么它的类型变为&arr2[i]
,并且是指向元素int*
的指针,并且您尝试将其分配给左值类型i
。如果您尝试这样做,编译器应该警告您。