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预处理器指令之间差异的一个很好的例子。