指针和数组关系的浅析

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]的地址一样;

  

以上是关于指针和数组关系的浅析的主要内容,如果未能解决你的问题,请参考以下文章

一维数组和一级指针浅析

Vector的浅析

Python中的字典有序无序浅析

向量vector 容器浅析

C++ 浅析智能指针

浅析C++智能指针和enable_shared_from_this 机制