【郝斌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("请输入您需要 ...
随机推荐
- ElasticSearch性能原理拆解
逐层拆分ElasticSearch的概念 Cluster:集群,Es是一个可以横向扩展的检索引擎(部分时候当作存储数据库使用),一个Es集群由一个唯一的名字标识,默认为"elasticsea ...
- 前端使用 Konva 实现可视化设计器(14)- 折线 - 最优路径应用【代码篇】
话接上回<前端使用 Konva 实现可视化设计器(13)- 折线 - 最优路径应用[思路篇]>,这一章继续说说相关的代码如何构思的,如何一步步构建数据模型可供 AStar 算法进行路径规划 ...
- Scrapy框架(五)--请求传参
在某些情况下,我们爬取的数据不在同一个页面中,例如,我们爬取一个电影网站,电影的名称,评分在一级页面,而要爬取的其他电影详情在其二级子页面中. 这时我们就需要用到请求传参. 请求传参的使用场景 当我们 ...
- 跨域问题CORS笔记
CORS跨域问题 跨域问题简介 跨域资源共享(Cross-origin resource sharing, CORS)是用于让网站资源能被不同源网站访问的一种安全机制,这个机制由浏览器与服务器共同负责 ...
- Apollo quick start SampleApp demo Java
<!--配置中心--> <dependency> <groupId>com.ctrip.framework.apollo</groupId> <a ...
- 幻想领域图床系统V1.2正式版发布
Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 幻想领域图床系统V1.2正式版发布 日期:2018-4-1 ...
- 硬件开发笔记(十九):Altium Designer 21软件介绍和安装过程
前言 AD硬件设计软件之一,前面说了allego,但是allego对项目的管理.原理图生成PCB,PCB反向原理图等方面比较复杂,对于一般的硬件(非多个高速电路),选择AD能够加大的节省开发工作量 ...
- CLR via C# 笔记 -- 线程基础(26)
1. Microsoft 设计这个OS内核时,决定在一个进程中运行应用程序的每个实例.进程实际是应用程序的实例要使用的资源的集合.每个进程都被赋予了一个虚拟地址空间,确保在一个进程中使用的代码和数据无 ...
- win10系统常用命令(netstat、ping、telnet、sc、netsh命令)
netstat命令 1. 查找端口占用 netstat -ano netstat -ano | findstr 5000 ping命令 ping 192.168.1.1 ping baidu.com ...
- Gitbook的安装和部署
安装 npm install gitbook-cli -g gitbook命令: gitbook init //初始化目录文件 gitbook help //列出gitbook所有的命令 gitboo ...