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;
}
C语言 指针在函数传参中的使用的更多相关文章
- python中给函数传参是传值还是传引用
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...
- 指针数组的初始化和遍历,并且通过for循环方式、函数传参方式进行指针数组的遍历
/************************************************************************* > File Name: message.c ...
- 『Python × C++』函数传参机制学习以及对比
一.Python函数传参 在python中,函数传参实际上传入的是变量的别名,由于python内在的变量机制(名称和变量值相互独立),只要传入的变量不可变(tuple中的元素也要是不可变的才行),那么 ...
- 悉数 Python 函数传参的语法糖
TIOBE排行榜是程序开发语言的流行使用程度的有效指标,对世界范围内开发语言的走势具有重要参考意义.随着数据挖掘.机器学习和人工智能相关概念的风行,Python一举收获2018年年度语言,这也是Pyt ...
- python函数传参是传值还是传引用?
首先还是应该科普下函数参数传递机制,传值和传引用是什么意思? 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题.基本的参数传递机制有两种:值传递和引用传 ...
- [Java]_函数传参的疑惑与思考
问题来源于leetcode上的两道题 Path Sum I && II,分别写了两个dfs. void dfs(TreeNode node , int sum , ArrayList& ...
- pytest十一:函数传参和 firture 传参数 request
为了提高代码的复用性,我们在写用例的时候,会用到函数,然后不同的用例去调用这个函数.比如登录操作,大部分的用例都会先登录,那就需要把登录单独抽出来写个函数,其它用例全部的调用这个登录函数就行.但是登录 ...
- 函数传参传的是啥的思考【java Python】
今天看<java 核心 卷1>的时候,作者提到了函数传参的问题,他提到,java传参,传的是值,而不是引用,然后,函数将要传的实参的值(如果实参是基本数据类型,那么就是值.如果实参是对象, ...
- C#篇(三)——函数传参之引用类型和值类型
首先应该认清楚在C#中只有两种类型: 1.引用类型(任何称为"类"的类型) 2.值类型(结构或枚举) 先来认识一下引用类型和值类型的区别: 函数传参之引用类型: 1.先来一个简单的 ...
随机推荐
- slave_net_timeout, MASTER_HEARTBEAT_PERIOD, MASTER_CONNECT_RETRY,以及 MASTER_RETRY_COUNT设置和查看
在主从复制中,有几个参数是非常重要的,包括slave_net_timeout, MASTER_HEARTBEAT_PERIOD, MASTER_CONNECT_RETRY,以及 MASTER_RETR ...
- 每天一点点之 taro 框架开发 - taro路由及传参
1.路由 taro的路由是自带的,不需要我们额外配置,只需要我们在app.js下config中配置pages即可 class App extends Component { config = { pa ...
- Profiling Top Kagglers: Bestfitting, Currently #1 in the World
We have a new #1 on our leaderboard – a competitor who surprisingly joined the platform just two yea ...
- 常见的http错误
错误类型: 1xx(临时响应) 表示临时响应并需要请求者继续执行操作的状态代码. 2xx (成功) 表示成功处理了请求的状态代码. 3xx (重定向) 表示要完成请求,需要进一步操作. 通常,这些状态 ...
- Frequently arduino function
unctions 功能if(Serial) ...
- MyBatis 关联查询的实现:一对一
有2个实体:用户.会员卡,一个用户只能办理一张会员卡,即一对一. user_tb : 需要在一方引入另一方的主键作为外键. card_tb: 使用扩展类 (1)在pojo包下新建User类: pack ...
- 在swift调用OC的第三方库
https://www.jianshu.com/p/4799ac1d7dce 2017.06.02 23:55* 字数 275 阅读 1619评论 0喜欢 3 环境:xcode 8.3.2 系统: M ...
- Swift 3必看:从使用场景了解GCD新API
https://www.jianshu.com/p/fc78dab5736f 2016.10.06 21:59* 在学习Swift 3的过程中整理了一些笔记,如果想看其他相关文章可前往<Swif ...
- GIT-Linux(CentOS7)系统安装Git
GIT-Linux(CentOS7)系统安装Git 未成功 查看是否已安装了Git 发现Git版本已存在,说明已安装了Git [root@localhost ~]# rpm -qa|grep git ...
- Django学习笔记〇四——数据库ORM的使用(有待修改)
Django框架基本上都是要和数据库结合使用的,我在以前讲过SQLAlchemy框架的使用,Django支持的不是SQLAlchemy,但是也内嵌了ORM框架,可以不需要直接面对数据库编程,而可以通过 ...