找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3608|回复: 0

[原]C语言中的二级指针(双指针)闫明

[复制链接]
发表于 2012-1-31 12:41:07 | 显示全部楼层 |阅读模式
原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/7220688二级指针又叫双指针。C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针。C++中可以使用引用类型来实现。
下面讲解C中的二级指针的使用方法。
例如我们使用指针来交换两个整型变量的值。
错误代码如下:
一级指针#include <stdio.h>
  1. void swap(int *a,int *b)
  2. {
  3.         int *tmp=NULL;
  4.         tmp=a;
  5.         a=b;
  6.         b=tmp;
  7. }
  8. int main(int *argc,int **argv)
  9. {
  10.         int a=2;
  11.         int b=3;
  12.         printf("Before swap a=%d  b=%d\n",a,b);
  13.         swap(&a,&b);
  14.         printf("After swap a=%d  b=%d\n",a,b);
  15.         return 0;
  16. }
复制代码

输出的结构如下:


结果分析:不论是数值还是指针,swap函数中的参数传递的是总是值,所以在上述函数中即使a和b的地址已参数传递给swap函数,而在函数内交换的是a和b的值(main函数中a的地址和b的地址),而交换完毕,函数相应的参数从栈中弹出,并不能返回给调用函数,所以该swap函数中的操作是徒劳。
所以,这是不妨使用二级指针
正确的代码:#include <stdio.h>
  1. void swap(int **a,int **b)
  2. {
  3.         int *tmp=NULL;
  4.         tmp=*a;
  5.         *a=*b;
  6.         *b=tmp;
  7. }
  8. int main(int *argc,int **argv)
  9. {
  10.         int a=2;
  11.         int b=3;
  12.         printf("Before swap a=%d  b=%d\n",a,b);
  13.         swap(&a,&b);
  14.         printf("After swap a=%d  b=%d\n",a,b);
  15.         return 0;
  16. }
复制代码

输出的结果如下:


结果分析:本实例中使用了二级指针,main()函数中的a和b的操作数的地址传递给swap()函数,swap()函数的功能是交换操作数a和b地址的地址的取值,通过指针的指针才能达到改变指针的值的目的,即是操作数a和b的地址交换,输出a和b的值达到交换的目的。
总结:
1、当操作二维数组时传递参数
2、当想改变指针的值的时候
不妨考虑使用二维指针。

作者:yming0221 发表于2012-1-30 22:21:58 原文链接


您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-22 18:49 , Processed in 0.028928 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表