|  | 
 
| 
#include<stdio.h>
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  int main(){
 int a[3][4]={{1,3,5,7},{9,11,13,15},{17,19,21,23}};
 int (*p)[4];
 p=a;
 printf("%d\n",p);                      //结果为  6487520
 printf("%d\n",*p);                     //结果为  6487520
 printf("%d\n",**p);                    //结果为  1
 printf("%d\n",&a[0]);                   //结果为  6487520
 printf("%d\n",a[0]);                    //结果为  6487520
 printf("%d\n",*a[0]);                  //结果为  1
 a[3][4]看做:含a[0],a[1],a[2]三个元素的一维数组。
 而对于数组在定义及初始化时,是int *z=b1,
 其实是int *z=&b1,即把b1首元素的地址存放进了指针的内存单元,
 
 那么考虑数组的时候就是       &数组名(如b1)=数组名(b1),
 所以     &a[0]=a[0];----式1
 ( 即a[0]这个一维数组第一个元素即a[0][1]的地址)
 而p指向a这个含有a[0]a[1]a[2]三个元素的一维数组,
 也即p=&a[0](此时看作元素)
 把式1带入得p=a[0],即为a[0][1]的地址,
 同时*p=*&a[0]  (*&为互逆运算)
 所以*p=a[0],和p一样都是a[0][1]的地址,所以输出结果相同。
 我这么完全没经过计算机的类似数学公式的代换问题大吗。。或者说这么理解对吗。。
 蠢萌新,求大佬讲解一下具体的机理
 | 
 |