C语言二级指针用途

首先,C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针。

学习C语言的一定知道:

  1. C语言中参数传入函数的过程为值传递,函数中修改的局部变量的值对原来的实参并没有影响。
  2. 当使用一级指针作为参数传入函数的过程为地址传递, 函数的实际操作是对指针的操作,那就可以通过函数中对于实参指针的修改达到修改实参的值的目的。

即:我们通过传递指针来达到修改一个值的目的。那么当我们需要修改一个指针的时候呢,这个时候我们就需要指针的指针(二级指针):

void GetMemory(char **p,int num)
{
  *p=(char*)malloc(sizeof(char)*num);       //此时*p就变成了是形参本身的地址
}
void main()
{
  char *str=NULL;
  GetMemory(&str,100);                      //&str是实参的地址,所以实参和形参之间就可以直接调用
  strcpy(str,"hello");
  free(str);
}

上述代码的易错写法是什么样呢:

void GetMemory(char *p,int num)
{
      p=(char*)malloc(sizeof(char)*num);       //p是形参指向的地址
}
void main()
{
      char *str=NULL;
      GetMemory(str,100);                      //str是实参指向的地址,不能通过调用函数来申请内存
      strcpy(str,"hello");
}

我们再强调下结论:

  1. 指向指针的指针的作用 :当要修改实参指针的指向的时候,形参必须使用指向指针的指针。
  2. 当修改的是实参指针指向的内容时,则形参只需是指针即可

关于值传递:

指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。

参考文献:

  1. C语言:二级指针的作用
posted @ 2022-05-31 12:28  时间的风景  阅读(407)  评论(0编辑  收藏  举报