C语言 指针在函数传参中的使用
int add(int a, int b) //函数传参的时候使用了int整型数据,本身是数值类型。实际调用该函数时,实参将自己拷贝一份,并将拷贝传递给形参进行运算。实参自己实际是不参与运算的。所以在该函数中,实参本身是没有得到改变的。
int main()
{
int x = 3, y = 5;
swap(x, y);
printf("x = %d ,y = %d\n",x, y); //交换失败
swap_pointer(&x, &y);
printf("x = %d ,y = %d\n",x, y); //交换成功
}
int swap(int a, int b) //C语言中,函数调用时,实参传递给形参实际是传值调用。也就是说,实参x和y将自己的值拷贝一份传给形参 a 和 b;因此在函数swap中实际得到交换的是 a 和 b,而不是实参 x 和 y,因此函数执行完后,x和y的值依然没有改变。
{
int temp;
temp = a; //a是swap里边的形参,实际调用时得到的是实参x的一份拷贝,只是和x的值相等而已,其他并无任何关联,因此在这里不能访问到实参x
a = b;
b = temp;
return 0;
}
int swap_pointer(int *p1, int *p2) //C语言函数调用时,一直都是传值调用。也就是说实际传递的一直都是实参的拷贝,但是在本函数中的形参和实参都不是x和y,而是x和y的地址值。这样的话,就让我们在调用函数里通过间接访问*p的方式,访问到了函数外部的实参。 //(如果不使用指针,再调用函数内部只能访问到形参,无法访问到函数外部的实参)
{
int temp;
temp = *p1; //实际调用时,p1得到的实参是x的地址&x,所以*p1代表的就是x
*p2 = *p1;
*p1 = temp;
return 0;
}
转载于:https://www.cnblogs.com/jiangtongxue/p/11079651.html
C语言 指针在函数传参中的使用相关推荐
- 【C语言进阶】数组、指针、函数——传参篇
目录 写在前面 一.数组传参 一维数组传参 二维数组传参 二.指针参数 一级指针传参 二级指针传参 三.函数传参 四.看懂代码 写在最后 写在前面 上篇文章介绍了指针数组和数组指针,有兴趣的小伙伴可以 ...
- 深入理解C语言系列之函数传参的那些事儿(函数参数、指针、地址、数组)
文章目录 一.指针与函数之间的关系 二.复制传参 三.地址传参 四.传一维数组(地址) 五.传二维数组(地址) 六.传指针数组(地址) 七.指针函数和函数指针 一.指针与函数之间的关系 1.我们可以给 ...
- 指针在函数传参的使用
首先函数有形参和实参之分,形参是在函数原型和函数定义中写的参数,实参是在实际调用函数时的参数 调用函数的过程:将实参压栈,在栈内存空间中重新创建以形参为编译地址的空间,值为实参传递,(这里就说明了为什 ...
- linux-c之函数(函数指针、函数传参、命令行参数)
一.函数的定义与声明.调用 #include <stdio.h>int add(int a,int b);//函数声明int main() {int a = 5;int b= 6;int ...
- C语言指针与函数传参
指针与函数传参 普通变量与函数形参 数组作为函数形参 结构体变量作为函数形参 传值调用和传址调用 输入型参数和输出型参数 函数的形参和返回值 函数传参中使用const指针 函数如何向外部返回多个值 总 ...
- java 传值为不可变_Java函数传参(String的不可变性)
本篇博客无意讨论Java里面函数传参是否只有值传递还是值传递和引用传递同时存在,仅讨论函数传参的一些原理. 一. 什么是函数传参? 最常见的一个swap函数:下面这个swap函数并不能实现我们想要的交 ...
- C语言与java中函数传参比较
C语言与java中函数传参比较 首先先说结论:C语言中参数传递有值传递,地址传递,引用传递.但java中的参数传递只有值传递 1.C语言中的参数传递 1>值传递 值传递非常好理解,其实就是对函数 ...
- 指针进阶(指针与数组传参、数组指针与指针数组、函数指针数组、回调函数的辨析)
指针 指针作为C语言中极具代表性的特征之一,也是C语言学习中的一大难点. 简单来说,指针我们需了解的最基础的即: 指针是一个用来存放地址的变量,地址唯一标识一块内存空间. 指针的大小是固定的4/8个字 ...
- 数组传参中形参的秘密,以及数组名当作函数实际参数的特点,以及二维数组,以及外部变量和全局变量
1.数组传参中形参的秘密 第三行:形参中不存在数组的概念,即便是中括号约定了数组的大小,也无效. 第二十行:传递的是一个地址,是数组的首地址. 数组名代表了整个数组的首地址. 第二十一行:第一个元素的 ...
最新文章
- eclipsevue代码怎么运行_[Java教程]使用eclipse初步学习vue.js操作
- 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY16-强化学习
- 设置activity图标
- OVH数据中心失火事件关于运维管理的思考
- Ubuntu录制GIF动画
- pandas常见错误类型TypeError: bad operand type for unary ~: 'float'
- java的设计模式用的什么软件_《图解Java多线程设计模式》UML用什么软件画?
- exe打包工具哪个最好_一键分发工具哪个最好用?30万人选择这款
- Codeforces 437D 贪心+并查集
- idea+maven打包Java项目
- mysql所选路径已经存在_【mysql第二次安装不了】mysql安装失败怎么清理干净?
- 【BZOJ】2194: 快速傅立叶之二
- Linux学习之安装配置VM虚拟机
- 你必须知道的指针基础-6.内存的初始化及结构体的使用
- Kotlin | 关于 Lazy ,你应该了解的这些事
- oracle中笛卡尔积怎么用,Oracle的表连接方法(四)笛卡尔积
- Sublime Text 3默认临时/缓存文件保存位置
- 盘点人气云计算大数据开源技术变迁
- ansible填坑记一,UNREACHABLE
- 破解 Kotlin 协程(6) - 协程挂起篇