图文详解c/c++中的多级指针与多维数组

2020-01-06 15:46:26于海丽

c,多级指针,多维数组,c语言多级指针

            由上可知,以下的赋值是正确的:


  char (*p)[3][2][2] = &a;//对数组名取地址类型为整个数组
  char (*p)[2][2] = a;
  char (*p) [2] = a[0];//或者a[1]、a[2]
  char *p = a[0][0];//或者a[0][1]、a[1][0]...

四:多级指针

      所谓的多级指针,就是一个指向指针的指针,比如:


  char *p = "my name is chenyang.";

  char **pp = &p;//二级指针

  char ***ppp = &pp;//三级指针

      假设以上语句都位于函数体内,则可以使用下面的简化图来表达多级指针之间的指向关系。

      c,多级指针,多维数组,c语言多级指针

         多级指针通常用来作为函数的形参,比如常见的main函数声明如下:


 int main(int argc,char ** argv)

         因为当数组用作函数的形参的时候,会退化为指针来处理,所以上面的形式和下面是一样的。


 int mian(int argc,char* argv[]) 

         argv用于接收用户输入的命令参数,这些参数会以字符串数组的形式传入,类似于:


 char * parm[] = {"parm1","parm2","parm3","parm4"};//模拟用户传入的参数

 main(sizeof(parm)/sizeof(char *),parm);//模拟调用main函数,实际中main函数是由入口函数调用的(glibc中的入口函数默认为_start)

         多级指针的另一种常见用法是,假设用户想调用一个函数分配一段内存,那么分配的内存地址可以有两种方式拿到:第一种是通过函数的返回值,该种方式的函数声明如下:


 void * get_memery(int size)
 {
  void *p = malloc(size);
  return p;
  }

        第二种获取地址的方法是使用二级指针,代码如下:


 int get_memery(int** buf,int size)
 { 
  *buf = (int *)malloc(size);
  if(*buf == NULL)
   return -1;
  else
   return 0;
 }
  int *p = NULL;
  get_memery(&p,10);

总结

关于多级指针的用法很多,尤其以二级指针应用最为广泛,后续的有时间再进行补充。c/c++中的多级指针与多维数组的内容到这就基本结束了,希望本文的内容对大家能有所帮助。