指针和数组关系的浅析
Posted SmartGame
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了指针和数组关系的浅析相关的知识,希望对你有一定的参考价值。
关于指针和数组之间的关系,估计有人还是对于数组与指针地址的关系有些模糊,对于这点,我今天对这一点做一个小小的总结好了;
我们已经知道指针和数组的用法差不多,但是指针的地址和指针指向的地址是不一样的,数组的地址和数组的首地址却是一样的;
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main1112()
{
char a[64];
int i = 0 ,j = 0;
char *b = NULL;
char c[3][3];
char *d[3];//指针数组
char **e = NULL;//二级指针
char (*f)[3];//数组指针
int aa[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int (*bb)[3] = NULL;
bb = aa;//将二维数组的地址赋给数组指针
for( i = 0 ; i < 3;i++)
{
for( j = 0 ; j < 3;j++)
printf("%d ",bb[i][j]);//存入到二维数组的数据被一一打印出来了
}
b = a;//一维数组的地址赋给指针
f = c;//
e = d;
printf("&a:%d,&a[0]:%d,b:%d,&b:%d,&b[0]:%d\n",&a,&a[0],b,&b,&b[0]);
printf("&c:%d,&c[0][0]:%d,&f:%d,f:%d,f[0]:%d,&f[0]:%d\n",&c,&c[0][0],&f,f,f[0],&f[0]);
printf("&d:%d,d[0]:%d,&d[0]:%d,&e:%d,e[0]:%d,&e[0]:%d\n",&d,d[0],&d[0],&e,e[0],&e[0]);
system("pause");
}
先是打印所有变量的地址,我们发现都不一样然后我们打印b,f,e,我们发现&a 和 &a[0] ,以及指针b是相等的,但是&b和他们不等,b[0]可以取出数组的值,那么从哪里取出的值,数组的空间,那么取地址的话自然是a数组的地址,所以&b[0]和&a[0]相等;
当中&c,&c[0][0],f[0],&f[0][0]相等,可以看出指针f[0]储存的是&c[0][0]的地址,f[0][0]可以取出值,那么储存数值的地方是哪里,当然是数组的空间同上,所以取地址的话就是数组的地址;
同上指针数组和二级指针的关系也是这样e取的是d的地址,通过*(e+0) 即e[0] 可以取出取出d[0]的地址,&e[0]和&d[0]的地址一样;
以上是关于指针和数组关系的浅析的主要内容,如果未能解决你的问题,请参考以下文章