warning C4047: '=' : 'int *' differs in levels of indirection from 'int (*)[3]'

#include <stdio.h>
void main()
{
    int *p;
 int i,j;
 int a[3][3]={{0,1,2},{3,4,5},{6,7,8}};
 p=a;//编译时在此处会报标题中的警告,想知道具体是什么原因?求高人指教!
 for(i=0;i<3;i++)
 {
  for( j=0;j<3;j++)
  {
             printf("%d\n",*p); 
              p++;
  }
 }
}

warning C4047: '=' : 'int *' differs in levels of indirection from 'int (*)[3]'


对于a[0][0]来说,它是第一行第一列的【元素】,所以类型是int
对于a[0]来说,它是第一【行】,所以类型是int [3]
对于a来说,它是整个矩阵,所以类型是int [3][3]

好,现在再来说指针
因为你也知道,在C语言里面指针和数组某种程度上说基本是一样的,于是
对于a[0][0]来说,它还是int
对于a[0]来说,它是int [3] 于是也可以是 int *,和p的类型相同
对于a来说,它是int [3][3] 于是也可以是 (int *)[3],用*对它解引用获得的是 int [3](于是它也可以是int *)于是类型和p相同了。
但是直接 p = a,类型不同,就出警告(在C++下是出错误)
  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值