C语言指针作参数为非引用传递
来源:互联网 发布:kindle电子书制作软件 编辑:程序博客网 时间:2024/06/01 10:39
C语言指针作参数不是引用传递
在函数中,当指针做参数时,可以将指针指向其它地址(通过计算或
赋值的形式),但是在函数外该指针所指向的地址并没有改变。
#include <stdio.h>void test_pointer(int *p,int *b){ p=b; //将p指向b *p=40; //并且改变b的值}int* t_pointer(int *p,int *b){ p=b; //将p指向b *p=80; //并且改变b的值 return p;}void main(){ int a=10; int b=20; int *p,*pb; p=&a; //现在p指向a pb=&b; //现在pb指向b test_pointer(p,pb); printf("*p=%d , *pb=%d\n",*p,*pb); //结果 10 40 p=t_pointer(p,pb); printf("*p=%d , *pb=%d\n",*p,*pb); //结果 80 80}
在test_pointer()函数中,指针p被指向指针pb指向的b并且修改了b的值。但是在函数外main方法中,指针p的指向没变仍指向a。若需要保留函数内的指针指向修改,可以采用如t_pointer()通过将函数返回值设置成指针来实现。
t_pointer()函数在改变单个指针的指向时容易,但是如果需要同时修改多个指针就不容易了(毕竟函数返回值只能有一个)。遇到这种情况可以尝试下面的方法。
void tt_pointer(int **p1,int **p2){ //p1 p2为指向指针的指针(指针的地址,二级指针) //*p1 *p2为数据的地址(一级指针) //**p1 **p2为数据 //交换指针指向 int *p; //临时指针 p=*p1; //指向p1指向的数据 *p1=*p2; //p1指向p2指向的数据 *p2=p; //p2指向p指向的数据 **p1=160; **p2=320;}
tt_pointer()函数使用了二级指针。C语言的函数参数传递为值传递,通过二级指针修改了指针指向的数据,达到了指针交换的目的。
0 0
- C语言指针作参数为非引用传递
- C/C++语言参数传递----值传递、引用传递、指针传递、指针引用传递
- C/C++语言参数传递----值传递、引用传递、指针传递、指针引用传递
- C/C++语言参数传递----值传递、引用传递、指针传递、指针引用传递
- C语言指针传递参数
- [C++] 变量、指针、引用作函数参数的区别
- c语言不支持函数引用传递参数
- C/C++语言函数参数传递:传值,传指针,传引用
- C语言中,数组名作为参数传递给函数时,退化为指针
- C语言中,数组名作为参数传递给函数时,退化为指针
- C语言中,数组名作为参数传递给函数时,退化为指针
- Python里的函数参数传递方式(表现为非值传递也非引用传递)
- C中的数组作函数参数被译为指针
- C语言用结构体指针作函数参数
- C语言用结构体指针作函数参数
- C语言用结构体指针作函数参数
- C语言结构体指针变量作函数参数
- C语言结构体指针变量作函数参数
- 数据库的视角及运维
- html到后台的编码问题
- [教程]盒饭君带你一稿设计适配双端 iOS Android 与设计稿对应关系
- 将AS中Module编译成JRA包引用
- eclipse 中启动 Tomcat 报 45秒超时 错误 的解决方法
- C语言指针作参数为非引用传递
- 如何通过测试替代(Test Doubles)合理隔离单元测试以提高单元测试效率
- hi3507/hi3515交叉编译live555
- -[MIInstallableBundle performVerificationWithError:]: 502: Upgrade's application-identifier entitlem
- Python图形界面开发初步 3
- 210,UIDatePicker
- live555在Linux下最简单地实现实时流媒体点播
- 操作系统概念阅读笔记2
- AndroidStudio 鼠标进入代码区显示提示信息 ——诺诺"涂鸦"记忆