指针数组与数组指针,一切都是指针问题

CSDN上有这么一个问题:

假如有一个二维数组  
   
  a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};  
  假如有一个二维数组  
   
  a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};  
  //问题1       这里可以理解成有3个元素的数组       每个元素又是有4个int类型元素数组组成的吧?    
  //那么a[0]是不是应该     是一个有4个元素数组的首地址?         这么理解对不对        
   
 
  还有   一个指针数组  
   
  int   (*q)[4];//问题2     q是一个指向有4个int型元素数组的指针吧       对不对??  
   
   
  如果上面的问题对      
   
  那么           q=a[0]  
       
   
  为什么是不合法的?    
  还有   一个指针数组  
   
  int   (*q)[4];//问题2     q是一个指向有4个int型元素数组的指针吧       对不对??  
   
   
  如果上面的问题对      
   
  那么           q=a[0]  
       
   
  为什么是不合法的?  

http://topic.csdn.net/t/20061020/10/5096078.html

 

对这个问题,高手们解释了很多。我也在这里总结一下我的看法:

首先,很关键是要搞清楚指针数组跟数组指针的概念:

int* p[5]  这个叫做指针数组,就是有一个数组有5个元素,每个元素是一个指针,每个指针指向一个整数

int (*p)[5] 这个叫数组指针,就是有一个指针,他指向一个大小为5的整型数组。

还有一种是这样的,int **, 这个叫二维指针,就是有一个指针,指向另一个指针,而这个指针指向一个整数。

我经常遇到一个问题,这样的:

int a[3][2] ={0,1,1,2,3,4 } ,这样来定义一个整型二维数组,然后我想把a赋给某个二维指针,结果老是报错:

cannot convert from 'int [3][2]' to 'int ** '

现在可以说知道为什么了。我一直以为二维数组名其实是一个二维指针,其实不然,他应该是一个数组指针,也就是说a应该等价于int (*p)[2] , 他是一个指针,指向长度为2的整型数组。

于是,我要将一个二维数组a赋给一个指针:

int (*p)[2] = a

很好,编译通过了。

指针果然是有许多需要注意的地方啊。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值