c - 我不确定为什么这个程序不能编译

标签 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 编译它时,它说“错误:在‘;’之前需要‘]’ 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 as arr1[r][i] = &arr2[i];?

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

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

关于c - 我不确定为什么这个程序不能编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39950096/

相关文章:

c - C 中返回指针的函数

c++ - 为什么我的服务器总是响应 "No certificates"?

java - 词法分析时如何存储token

ruby-on-rails - 如何检查 Mongoid 数组字段是否包含另一个数组中的一个或多个项目?

c - 在 C 中将 char 数组拆分为多个部分 : unexpected behaviour

c - 标准定义了什么类型的双关语/指针魔术?

c指针引用和取消引用

c - 使用 sscanf 解析不会保留数组以供后续使用

java - 连接 JSONArrays

c++ - 如何深拷贝链表对象指针