首页 > 代码库 > C语言中的二级指针(双指针)
C语言中的二级指针(双指针)
原创作品,转载请标明出处http://blog.csdn.net/yming0221/article/details/7220688
C语言更多查看
C语言使用注意事项(一)
C语言使用注意事项(二)
C语言使用注意事项(三)
二级指针又叫双指针。C语言中不存在引用,所以当你试图改变一个指针的值的时候必须使用二级指针。C++中可以使用引用类型来实现。
下面讲解C中的二级指针的使用方法。
例如我们使用指针来交换两个整型变量的值。
错误代码如下:
一级指针
[cpp] view plaincopyprint?
- #include <stdio.h>
- void swap(int *a,int *b)
- {
- int *tmp=NULL;
- tmp=a;
- a=b;
- b=tmp;
- }
- int main(int argc,char **argv)
- {
- int a=2;
- int b=3;
- printf("Before swap a=%d b=%d\n",a,b);
- swap(&a,&b);
- printf("After swap a=%d b=%d\n",a,b);
- return 0;
- }
#include <stdio.h>void swap(int *a,int *b){ int *tmp=NULL; tmp=a; a=b; b=tmp;}int main(int argc,char **argv){ int a=2; int b=3; printf("Before swap a=%d b=%d\n",a,b); swap(&a,&b); printf("After swap a=%d b=%d\n",a,b); return 0;}输出的结构如下:
结果分析:不论是数值还是指针,swap函数中的参数传递的是总是值,所以在上述函数中即使a和b的地址已参数传递给swap函数,而在函数内交换的是a和b的值(main函数中a的地址和b的地址),而交换完毕,函数相应的参数从栈中弹出,并不能返回给调用函数,所以该swap函数中的操作是徒劳。
这里完全可以直接交换a和b的值,不过如果a和b不是一个32位的整型变量,而是一个复杂的数据结构,这样做会降低效率。如下;
[cpp] view plaincopyprint?
- void swap(TYPE *a,TYPE *b)
- {
- TYPE tmp;
- tmp=*a;
- *a=*b;
- *b=tmp;
- }
void swap(TYPE *a,TYPE *b){ TYPE tmp; tmp=*a; *a=*b; *b=tmp;}
二级指针
下面是使用二级指针分配内存的例子
[cpp] view plaincopyprint?
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- void memorylocate(char **ptr)
- {
- *ptr=(char *)malloc(10*sizeof(char));
- }
- int main(int argc,char **argv)
- {
- char *buffer;
- memorylocate(&buffer);
- strcpy(buffer,"12345");
- printf("buffer %s\n",buffer);
- return 0;
- }
#include <stdio.h>#include <stdlib.h>#include <string.h>void memorylocate(char **ptr){ *ptr=(char *)malloc(10*sizeof(char));}int main(int argc,char **argv){ char *buffer; memorylocate(&buffer); strcpy(buffer,"12345"); printf("buffer %s\n",buffer); return 0;}
当想改变指针的值的时候不妨考虑使用二维指针。
C语言中的二级指针(双指针)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。