C语言中的二级指针(双指针)

本文详细介绍了C语言中二级指针的概念及其应用场景,通过对比一级指针的使用方法,阐述了如何利用二级指针来改变指针本身的值,特别强调了在交换复杂数据结构时二级指针的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二级指针又叫双指针。C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针。C++中可以使用引用类型来实现。

下面讲解C中的二级指针的使用方法。

例如我们使用指针来交换两个整型变量的值。

错误代码如下:

一级指针

  1. #include<stdio.h>
  2. voidswap(int*a,int*b)
  3. {
  4. int*tmp=NULL;
  5. tmp=a;
  6. a=b;
  7. b=tmp;
  8. }
  9. intmain(intargc,char**argv)
  10. {
  11. inta=2;
  12. intb=3;
  13. printf("Beforeswapa=%db=%d\n",a,b);
  14. swap(&a,&b);
  15. printf("Afterswapa=%db=%d\n",a,b);
  16. return0;
  17. }

输出的结构如下:


结果分析:不论是数值还是指针,swap函数中的参数传递的是总是值,所以在上述函数中即使a和b的地址已参数传递给swap函数,而在函数内交换的是a和b的值(main函数中a的地址和b的地址),而交换完毕,函数相应的参数从栈中弹出,并不能返回给调用函数,所以该swap函数中的操作是徒劳。可怜

这里完全可以直接交换a和b的值,不过如果a和b不是一个32位的整型变量,而是一个复杂的数据结构,这样做会降低效率。如下;

  1. voidswap(TYPE*a,TYPE*b)
  2. {
  3. TYPEtmp;
  4. tmp=*a;
  5. *a=*b;
  6. *b=tmp;
  7. }



二级指针

下面是使用二级指针分配内存的例子

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. voidmemorylocate(char**ptr)
  5. {
  6. *ptr=(char*)malloc(10*sizeof(char));
  7. }
  8. intmain(intargc,char**argv)
  9. {
  10. char*buffer;
  11. memorylocate(&buffer);
  12. strcpy(buffer,"12345");
  13. printf("buffer%s\n",buffer);
  14. return0;
  15. }


当想改变指针的值的时候不妨考虑使用二维指针。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值