这是我的程序:
#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 编译它时,它说“错误:在‘;’之前需要‘]’ token ”在第 4 行和第 6 行。
此外,引用 for 循环,将“arr1[r][i] = arr2[i];”做与“arr1[r][i] = &arr2[i];”相同的事情吗?哪个(更)正确?
最佳答案
宏 COL
被扩展为 3;
,所以在你的声明和定义中看起来像这样:
int arr1[][3;]
从 #define
行中删除分号。
Also, refer to the for-loop, would
arr1[r][i] = arr2[i];
do the same thing asarr1[r][i] = &arr2[i];
?
没有。第一个是正确的。 左值 arr1[r][i]
指的是一个整数。 右值 arr2[i]
也是一个整数。
如果你通过 &arr2[i]
引用它,那么它的类型变成了 int*
,并且是一个指向元素 i
的指针,并且您尝试将其分配给 int
类型的左值。如果您尝试这样做,您的编译器应该警告您。
关于c - 我不确定为什么这个程序不能编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39950096/