【问题标题】:Array pointers assignmnet to 2-D array数组指针分配给二维数组
【发布时间】:2021-07-29 08:35:19
【问题描述】:
void  main()
  {
    int a[][4]={ 5,7,5,9,
                 4,6,3,1,
                 2,9,0,6};
    int *p;
    int *q [4];
    p=(int *)a;
    q=a;
    printf("\n %u %u",p,q);
    p++;
    q++;
    printf("\n %u %u",p,q);
}

我的问题是我们可以将二维数组分配给指针数组吗?上面的代码显示错误为 1.c:在函数“main”中: 1.c:14:6: 错误:赋值给数组类型的表达式

【问题讨论】:

  • q 的声明不正确。它需要是 int (*q)[4]; 括号是强制正确分组所必需的。这样,它将是指向int 数组的指针,而不是指向int 的指针数组。
  • 收到警告时停止投射。演员表不是银弹。 p=(int *)a 应该是 p = a[0]; 。代码应该展示你知道自己在做什么的证据;不要投射以隐藏表明你没有的警告。

标签: arrays c pointers


【解决方案1】:

在 C 语言中,数组不是一等公民:

  • 当在表达式中使用时,数组衰减为指针
  • 你永远不能分配给一个数组

如果q是一个指针数组,答案是否定的,你不能赋值给一个数组。

如果您希望q 成为指向数组的指针,则必须将其声明为int (*q)[4];

int(*q)[4];
q = a;

然后您可以使用它来访问a 的元素:q[i][j]a[i][j] 相同(而q[i]q[j] 相同)

【讨论】:

  • "和q[i]q[j] 一样" - 你的意思和a[i] 一样吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 2021-07-23
  • 1970-01-01
  • 2020-08-21
  • 1970-01-01
  • 2020-08-03
  • 1970-01-01
相关资源
最近更新 更多