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