一级指针做为函数参数
来源:互联网 发布:展览会门票软件 编辑:程序博客网 时间:2024/05/16 06:55
- 一级指针做为函数参数可以去间接的修改实参的值,但并不能返回一个地址,来看一段代码
#include<stdio.h>#include<string.h>#include<stdlib.h>void fun1(int *n){ *n=6;}void fun2(char *str){ char *p=(char *)malloc(20*sizeof(char)); strcpy(p,"123456789"); str=p;}char *fun3(){ char *str=(char *)malloc(20*sizeof(char)); strcpy(str,"123456789"); return str;}int main(){ int num=3; char *str=(char *)malloc(20*sizeof(char)); strcpy(str,"abcdefgh"); printf("num: %d\n",num); printf("str: %s\n",str); fun1(&num); printf("fun1调用后num: %d\n",num); fun2(str); printf("fun2调用后str: %s\n",str); str=fun3(); printf("fun3调用后str: %s\n",str);}
运行结果如下
我们发现以下几点
1.调用函数fun1后num值确实改变了
2.调用函数fun2后str值并没有改变
3.调用函数fun3后str值改变了
关于第一点无需多说,指针做函数参数确实可以间接改变实参的值,但奇怪的是执行fun2后并没有将fun2中变量 p的地址返回给实参str,这是因为不管是传值还是传地址实际上都是传值,形参只是实参的一个副本,当传参完成后形参与实参就没有了关系,所以无论在被调函数中对形参如何操作,都不会影响实参,所以掉用函数fun2不会使str值变化。而不同的是函数fun3是直接将地址做为返回值返回,所以函数fun3改变了str的值。
- 如果想要用指针做函数参数去改变实参的值,可以使用二级指针,代码如下:
void fun(char **str){ char *p=(char *)malloc(20*sizeof(char)); strcpy(p,"123456789"); *str=p;}int main(){ char *str=(char *)malloc(20*sizeof(char)); strcpy(str,"abcdefgh"); printf("str: %s\n",str); fun(&str); printf("函数调用fun后str: %s\n",str); return 0;}
结果如下
函数fun使str的值发生了改变,与函数fun2不同的是fun传递的是str的地址是一个二级指针,所改变的是&str中的值,相当于改变了指针指向
阅读全文
0 0
- 一级指针做为函数参数
- 函数指针做为参数的例子
- 指针做为参数传递
- 指针做为参数注意事项
- 数组做为函数参数
- 一级指针域二级指针的函数参数传递
- 一级指针还是二级指针作函数参数(2)
- 一级指针还是二级指针作函数参数
- 一级指针、二级指针做函数参数的区别
- C语言指针笔记之 一级指针的应用(指针做函数参数)
- 函数参数的传递问题(一级指针和二级指针)
- 函数参数的传递问题(一级指针和二级指针)
- 函数参数的传递问题(一级指针和二级指针)
- 函数参数的传递问题(一级指针和二级指针)
- c语言中一级指针和二级指针做函数参数
- 函数参数的传递问题(一级指针和二级指针)
- 函数参数的传递问题(一级指针和二级指针)
- 函数参数的传递问题(一级指针和二级指针)
- 并行性与并发性
- 分布式文件系统概述
- 【转】python-skimage的边缘与轮廓
- 欢迎使用CSDN-markdown编辑器
- hibernate_day04_03_hql查询
- 一级指针做为函数参数
- 【面经】陌陌-2017年8月28日,散招实习生
- 2017-11-27 白银,油,铜分析
- centos7 网络yum源
- Unable to locate package错误解决办法
- MySQL 保存 表情出错。 Incorrect string value: '\xF0\x9F\x8C\xB8'
- ConcurrentLinkedQueue的使用
- 【Scikit-Learn 中文文档】优化估计器的超参数
- C++ 三目运算符