`
mmdev
  • 浏览: 12952122 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

二级指针又叫双指针。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. }


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


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics