【郝斌C ST】指针 swap问题
C语言 指针 swap问题
在主函数种实现变量的交换

现在我们把这交换的行为封装进方法中

swap函数确实进行了交换,打印也是10和5了,但是下面a和b的结果还是5和10
- 形参i 和 形参j 并不是和 a,b一个变量,实参 a,b 传递值给形参 i,j
- 形参i 和 形参j ,还有temp变量,在内存也分配了空间,main函数跳转至swap函数开始执行
- swap函数执行完毕,swap函数和内部的变量一并释放销毁,
- i,j已经销毁,主函数的a,b 依然存在,最后一步打印的还是之前的a,b
- swap函数交换的是这个函数内部的变量,并没有影响主函数的a,b!!!
使用指针形参i 和 j

传值也必须对应的是变量的地址

对指针变量进行交换

- a 值5 地址1001 ,b 值10 地址1002
- 形参:指针变量 i 值收到 &a 1001,指针变量j 值收到 &b 1002 , 声明指针变量temp,
- 三者交换完毕 指针变量 i 值1002,指针变量j 值1001
- 但是a和b还是值5 地址1001 ,值10 地址1002
- 这个问题还是一样,内部的指针变量确实交换了,但是方法结束之后有影响到主函数的a,b了吗?并没有!!!

- 指针变量 i 和 j 收到 a 和 b 的地址
- 把 指针i 的地址反引用获取该值【地址值】存储的值,赋值给 变量temp,这个类型是int 类型,不是int指针类型!!!
- 把 指针j 的地址反引用获取该值【地址值】存储的值 ,赋值给 反引用的 i【*i】
- 把 temp 变量的值,赋值给 反引用的 j【*j】
- 我们这样就对主函数的a变量 和 b变量的值进行了交换
- a 变量的地址 给了指针 i ,i 可以通过*i 操作修改 a变量的值,
也就是说 *i 指向了变量a 的值,变量a可以操作这个值,*i也可以操作
* 的用法:
- 单作操作符,用于相乘运算符
- 定义指针变量 int * p 定义了一个int指针类型变量,标识符是p,p只能存放int类型变量的地址,
- 指向运算符,*p指向了该地址存储的值
#include <stdio.h>
void swap(int * i,int * j){
int temp = *i;
*i = *j;
*j = temp;
}
int main() {
int a = 5;
int b = 10;
printf("a = %d, b = %d \n",a,b);
swap( &a, &b );
printf("a = %d, b = %d \n",a,b);
return 0;
}
《郝斌C语言 自学》 P127 - P129
https://www.bilibili.com/video/BV1os411h77o
【郝斌C ST】指针 swap问题的更多相关文章
- 郝斌老师C语言学习笔记(一)
在给变量分配内存时,很可能这段内存存在以前其他程序使用留下的值.当使用VC编译器,若编译器发现没有给变量赋值而使用,就会返回一个以“85”开头的很大的数字(此时该段内存中为一个垃圾数,为了避免出现较常 ...
- [C]郝斌C语言课程大纲及笔记
本笔记整理于郝斌老师C语言课程,做学习参考之用. 1.[编程笔记]第一章 C语言概述 2.[编程笔记]第二章 C语言预备知识 3.[编程笔记]第三章 运算符与表达式 4.[编程笔记]第四章 流程控制 ...
- 郝斌老师的SQL教程
时隔两年,重拾数据库编程.郝斌老师的sql教程通俗易懂,用作复习简直不能太赞.
- 郝斌–SQL Server2005学习笔记
数据库(Database)狭义上是指存储数据的仓库,广义上包含对数据进行存储和管理的软件(DBMS)和数据本身.数据库由表.关系和操作组成. 一.数据库简介 1.为什么需要数据库 数据库简化了对数据的 ...
- 郝斌C语言代码
#include<stdio.h> int main() { ; printf("%#x\n",a); ; } /* output 0xf; */ //(15)10= ...
- 郝斌 SqlServer2005 学习笔记
1.0 什么是数据库 狭义:存储数据的仓库. 广义:可以对数据进行存储和管理的软件以及数据本身统称为数据库. 另外一种说法:数据库是由表.关系.操作组成. 2.0 为什么要学习数据库 几乎所有的应用软 ...
- C语言-郝斌笔记-007是否为素数
是否为素数 # include <stdio.h> bool IsPrime(int val) { int i; ; i<val; ++i) { ) break; } if (i = ...
- C语言-郝斌笔记-006排序及查找
1. int partion(int *a, int low, int high) { int value = a[low]; int t; while (low < high) { while ...
- C语言-郝斌笔记-005菲波拉契序列
菲波拉契序列 /* 菲波拉契序列 1 2 3 5 8 13 21 34 */ # include <stdio.h> int main(void) { int n; int f1, f2, ...
- C语言-郝斌笔记-004判断是否为回文数
判断是否为回文数 # include <stdio.h> int main(void) { int val; //存放待判断的数字 int m; ; printf("请输入您需要 ...
随机推荐
- 小米 红米 Redmi MIUI 5G开关
小米 红米 Redmi MIUI 5G开关 1.打开手机拨号界面输入 *#*#54638#*#* 之后拨号界面底部会显示display 5G network menu (显示5G网络菜单) 注意:先是 ...
- (十)selenium实现微博高级搜索信息爬取
1.selenium模拟登陆 2.定位进入高级搜索页面 3.对高级搜索进行定位,设置. 4.代码实现 import time from selenium import webdriver from l ...
- springboot项目配置多数据源
springboot项目配置多数据源 //关键:mybatis文件的目录需要区分开来 sqlSessionFactoryBean.setMapperLocations(new PathMatching ...
- Apollo quick start SampleApp demo Java
<!--配置中心--> <dependency> <groupId>com.ctrip.framework.apollo</groupId> <a ...
- 漏洞复现之CVE-2012-1823(PHP-CGI远程代码执行)
关于CGI知识点 `CGI模式下的参数: -c 指定php.ini文件的位置 -n 不要加载php.ini文件 -d 指定配置项 -b 启动fastcgi进程 -s 显示文件源码 -T 执行指定次该文 ...
- 超越datetime:Arrow,Python中的日期时间管理大师
介绍 Arrow是一个Python库,它提供了一种合理且对人类友好的方法来创建.操作.格式化和转换日期.时间和时间戳.它实现了对datetime类型的更新,填补了功能上的空白,提供了一个智能的模块AP ...
- MYSQL8.0-JSON函数简单示例-JSON_EXTRACT|JSON_VALUE|JSON_TABLE
JSON类型在日常应用开发中,用得很少,个人通常用于存储常常变化的配置参数. 它适用于什么业务场景,不好说.就好像许多年前读到的一篇文章,说有个国外公司利用ORACLE的CLOB/BLOB管理一些信息 ...
- WPS中导入endnote插件
WPS中导入endnote插件 1. 找到 Endnote 插件的目录: D:\Program Files (x86)\EndNote 20\Product-Support\CWYW 2. 把Cw ...
- python重拾第十天-协程、异步IO
本节内容 Gevent协程 Select\Poll\Epoll异步IO与事件驱动 引子 到目前为止,我们已经学了网络并发编程的2个套路, 多进程,多线程,这哥俩的优势和劣势都非常的明显,我们一起来回顾 ...
- 最新最全的BMS/EMS/PCS六大国产“储能方案”,不信你全都看过!
作为国内领先的嵌入式产品平台提供商,创龙科技在"能源电力"行业拥有超过1000家客户,接下来就让小编向大家分享创龙科技推出的BMS/EMS/PCS"六大储能方案" ...