函数参数的值传递和地址传递
来源:互联网 发布:淘宝同款排除王工具 编辑:程序博客网 时间:2024/06/06 05:14
利用一个小例子说明,见代码。
#include<stdio.h>void F1(int *pp){pp++;*pp = 9;}void F2(int **pp){(*pp)++;}//以上函数中,接收数据的参量都是pp,而不会是*pp或者**ppint* F3(int *pp){pp++;return pp;}int main(void){int *p;int a[2] = { 4,5 };p = a;printf("1--------%d\n", *p);//开始值为4F1(p);printf("2--------%d\n", *p);//4//由于只是传值,在子函数F1的内部改变复制品的值,并不会改变原品p的值//可以理解为用两个变量指向同一个地址,即形参pp和实参p指向同一个地址//其中形参pp++,另外一个实参p并不会受影响//但是可以修改指针所指的值,如F1代码中将a[1]的值改为9;printf("2`-------%d\n", a[1]);//9F2(&p);printf("3--------%d\n", *p);//9//传址,pp=&p(指针的地址,即pp是指向指针的指针),*pp=*(&p)=p;//如果要修改指针p,则应该传入指针p的地址(&p),此时进行*pp++操作,其实是对实参指针p进行操作getchar(); getchar();return 0;}//这个例子说明:如果要在子函数中修改主函数传过来的指针的指向,那么主函数应该向子函数传入指针的地址(而非指针本身);//此时在子函数中进行*操作后可以获得原来指针,而不是原来指针的复制品,之后可以根据需要修改指针。//或者,将返回值类型改为指针类型,然后返回修改后的指针,给原来主函数的指针,如F3函数,此时在主函数中需要添加p=F3(p)代码。
#include <stdio.h> #include <stdlib.h> #include<string.h>/*void getmemory(char **p){*p = (char *)malloc(100);strcpy(*p, "helloworld");//return p;}int main(){char* str = NULL;getmemory(&str);printf("%s", str);free(str);getchar();return 0;}*/char* getmemory(char *p){p = (char *)malloc(100);strcpy(p, "helloworld");return p;}int main(){char* str = NULL;str = getmemory(str);printf("%s", str);free(str);getchar();return 0;}
0 0
- 函数参数的值传递和地址传递
- C++函数参数传递--值传递和地址传递
- C++ 函数参数传递 值传递,引用传递,地址传递
- C++函数参数中的: 值传递,地址传递,双向传递
- 函数的传参方式有值传递和地址传递,地址传递又分为指针传递和引用传递。
- C函数的值传递和地址传递
- 一道考察函数参数传递、值传递、指针传递(地址传递)、引用传递
- 一道考察函数参数传递、值传递、指针传递(地址传递)、引用传递
- 函数参数传递、值传递、指针传递(地址传递)、引用传递
- 函数参数按数值传递和按地址传递
- Java函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- JavaScript中函数参数的值传递和引用传递
- opencv频域相乘
- java回调机制的通俗理解
- 余弦相似性获取文章相似度的java实现
- ubuntu下新建caffe的c++工程 环境配置
- mysql数据库(七)导入文本文件
- 函数参数的值传递和地址传递
- Flex4性能优化 转
- Android框架学习之RxJava(三)
- 【上机笔试之五】计算两个日期的差值
- 洛谷——P3366 【模板】最小生成树
- 色情软件是如何步步为营诱导用户点击付费
- MySQL图形工具SQLyog破解版
- 关于Eclipse中web项目部署至tomcat中的路径问题
- SPOJ-Matrices with XOR property,暴力打表!