鱼C论坛

 找回密码
 立即注册
查看: 840|回复: 0

[技术交流] 二维数组指针运用是的问题与想法

[复制链接]
发表于 2020-6-8 15:31:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
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]的地址,所以输出结果相同。
我这么完全没经过计算机的类似数学公式的代换问题大吗。。或者说这么理解对吗。。
蠢萌新,求大佬讲解一下具体的机理
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 15:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表