微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么这个警告“警告:从不兼容的指针类型'int*[3]'分配给'int *'”?

如何解决为什么这个警告“警告:从不兼容的指针类型'int*[3]'分配给'int *'”?

如果数组名称指向第一个元素,那么n应该给出位置2, 为什么会有这个警告?

#include <stdio.h>

int main()
{
    int n[3][3] = {
        {2,4,3},{6,8,5},{3,5,1}
      };
      int i,*pt;
      pt = n ;
     
      for (int i = 0; i <=8; i++)
      {
        printf("%d\n",*(pt + i) );
      }
}

但是当我写pt = *n时;它工作正常。为什么?

解决方法

在某些情况下,数组类型将“衰减”为指针类型,其中 外部数组维度[]被替换为*。例如,int a[5]将衰减到int *,而int b[5][10]将衰减到int (*)[10]

在您的情况下,int n[3][3]会衰减到int (*)[3],因此您可以将n分配给该类型的指针而无需强制转换。但是它与int *(例如int *pt)不兼容,因此尝试将n分配给pt会导致错误。如果您希望int (*pt)[3];是兼容的指针类型,则可以声明pt

如果要将n视为固定存储并使用int *pt;进行访问,则可以像int *一样将其转换为pt = (int *) n;。在这种情况下,您可以将n视为9整数的平面数组。然后,您可以使用pt[i]来引用元素,这是编写等效的*(pt + i)的正常方法。

通常,尽可能尝试使用兼容的指针类型,而无需强制转换。但是,如果您真的想将数组视为具有不同的形状,那么在数据分配兼容的情况下,可以在进行指针分配时使用强制转换。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。