指针与非指针的交换函数

利用指针在子函数中交换两个整数的值 利用指针在子函数中交换两个整数的值 在子函数中,系统会把主函数传递进来的参数进行拷贝,并对拷贝的数据进行处理,这样就能在得到结果的同时不改变主函数中原本的值。那么假如我们想要在子函数中,改变主函数中的值要怎么做呢?这时,就需要指针了。 情况一 假如我们不使用指针,只用交换的普通三段式,结果会怎么样呢? 代码如下: #include<stdio.h> void Swap(int a,int b) { int tmp=a; a=b; b=tmp; } int main() { int a=1 阅读详情

指针与非指针的交换函数

下面将给出7个交换函数,

你能马上看出哪些交换函数真的起作用了吗?

void swap1(int a,int b){
    int c;a=b;b=c;
}
int main(){
    int aa=233,bb=332;
    swap(aa,bb);
    return 0;
}

swap1 × < - 答案在这里 (你没发现这里空出来了吗?)

原因是在main函数中调用swap1()时,将实参a,b的值传递给了交换函数,如果此时在swap1()中打印出a,b的值,可以发现a,b的值交换了.但是该过程其实是将aa和bb分别复制了一份给了函数,执行完swap1()之后,aa和bb的没有任何变化.

void swap2(int *a,int *b){
    int *c;
    c=a;a=b;b=c;
}
int main(){
    int aa=233,bb=332;
    swap(&aa,&bb);
    return 0;
}

swap2 × < - 答案在这里

这里是将形参(指针)的值给交换了,即直叫唤了形参中 *a与 *b的地址.那么更不用说把aa和bb的值给交换了.
而swap2中未给c赋值,c可能指向一个未知的存储单元,且该单元的数据可能是有用的,因此swap2()不但没有实现两个数的交换,反而给系统的稳定性带来威胁.可以int *c=new int 来避免这种威胁.

void swap3(int *a,int *b){
    int *c=new int;
    c=*a;*a=*b;*b=*c;
}
int main(){
    int aa=233,bb=332;
    swap(&aa,&bb);
    return 0;
}

swap3 × < - 答案在这里

将int赋值给*int,编译错误

void swap4(int *a,int *b){
    int c;
    c=*a;*a=*b;*b=*c;
}
int main(){
    int aa=233,bb=332;
    swap(&aa,&bb);
    return 0;
}

swap4 √ < - 答案在这里

为了使在函数中改变了的变量能被其他函数调用,正确的办法是用指针变量作为函数参数没在函数执行过程使用指针变量所指向的变量值发生变化.

void swap5(int &a,int &b){
    int c=a;a=b;b=c;
}
int main(){
    int aa=233,bb=332;
    swap(aa,bb);
    return 0;
}

swap5 √ < - 答案在这里

使用了’&’,对于引用的操作实际上是作用在引用所引得对象上
我的理解是:使用了’&’,则在调用函数时,会直接在a的地址上进行修改,因此在使用函数后,aa与bb地址上的值被交换了,因此它们的值就真的被交换了.

void swap6(int &a,int &b){
    a=a+b;
    b=a-b;
    a=a-b;
}
int main(){
    int aa=233,bb=332;
    swap(aa,bb);
    return 0;
}

swap6 √ < - 答案在这里


int c=a,d=b;
第一条语句:a=a+b;即a=c+d;
第二条语句:b=a-b;即b=c+d-d=c;
第三条语句:a=a-b;即a=c+d-c=d;
这样a和b的值就交换了,再基于swap5()则aa和bb的也交换了.

void swap7(int &a,int &b){
    a=a^b;
    b=a^b;
    a=a^b;
}
int main(){
    int aa=233,bb=332;
    swap(aa,bb);
    return 0;
}

swap7 √ < - 答案在这里


首先要说明A^A=0;(这个能懂吧,异或就是”同假异真”,A与A完全相同,故A^A=0).
这样就可以比较好地推出来了.

看了这么多是不是有点头晕,现在你对交换函数是否有了更深的理解?^_^

STM32——IIC(I2C)中断与DMA通信实战解析 本文深入解析STM32的IIC(I2C)通信中断与DMA实战应用。通过对比轮询方式的低效,详细介绍中断模式和DMA模式的实现原理、状态机编程技巧及性能优化策略,并结合SHT30传感器案例展示如何高效读取数据,显著提升系统响应速度和CPU利用率。 阅读详情

相关推荐

IAR编译相同工程生产hex文件checksum不一致问题

IAR Checksum

xqw19891201的博客 1382

C++ 新式类型转换

/这种类型转换适用于依赖实现的底层编程技术,代码不可移植,如不同的系统可能以不同的顺序存储多字节数据中的字节。//类型转换掉表达式的const或volatile属性,仅当type和expression一样的时候,才合法。//e的类型是目标type的共有派生类,是目标type类型,是目标type的共有基类。//父子指针的相互转化的运算符,或者自己转自己。//转指针与转非指针,非指针要传地址或者引用。//相互转换是时,空间一定要够用,否则不行。//函数指针与数据指针不能相互转换。//用于危险类型转换。...

qq_52119661的博客 187

数据科学常见模型总结(二)-倾向性得分匹配模型

PSM的核心思想是从未受干预的用户群体中,找到和干预对象一模一样的用户,这样就可以把因果效应归因到干预上。

wudelong0112的专栏 4888

const指针强转为非const指针后的赋值问题

#include using namespace std; int main() { const int a = 5; const int * p = &a; int *p_var = NULL; p_var = const_cast int*>(p); //强转为非const指针 cout << a <<endl; *p_var

jeffasd的专栏 7442

避开这5个坑!Tushare金融数据获取与分析的常见错误排查指南

本文详细解析了使用Tushare进行金融数据获取与分析时常见的5个问题,包括Token失效、数据缺失、频率限制、数据一致性和性能瓶颈,并提供了实用的解决方案和优化策略。通过Python代码示例和最佳实践,帮助金融数据分析师和量化开发者高效避开这些陷阱,提升工作效率。

x2y3z4a5b的博客 1036

【主力资金密码】副图指标升级版使用技术图文案例分解,通达信软件炒股指标公式代码

(1)主力资金线在低位时,对应的副图指标显示柱线是绿色,这个阶段主力资金参与小,行情处于下跌趋势或弱势震荡。当然,如果结合主图指标【翻倍密码系统】操作,主图的两个买卖点以及K线均线变色跟踪功能,更多的技术支撑,多空更加清晰,共振做多或多头更加确定和安全。如上图标记,中档虚线是参考安全操作的一个区间划分,粉色阶段做多或持股为主,为操作增加一道安全保护。如上图,副图指标【主力资金密码】更新叠加操作区间背景,绿色阶段持币或做空,粉色阶段做多或持股。如上图,副图指标,标记的两个区间,绿色区间时做空或持币。

weixin_69760830的博客 2552

Go:从指针到非指针,方法实现的优雅转型

将方法从指针类型转换为非指针类型,不仅简化了代码逻辑,还提高了代码的安全性和可读性。在实际开发中,选择何种接收者类型应结合具体的业务需求和数据结构特点,确保代码的健壮性和可维护性。通过合理的选择,我们可以编写出更加优雅和高效的Go语言代码。

十年运维开发经验的王义杰在此分享自己的知识和经验 533

香橙派5使用RK3588S内置NPU加速yolov5推理,实时识别数字达到50fps

香橙派5采用了RK3588S,内置的NPU达到了6Tops的算力,博主这里记录一下自己的踩坑过程,好不容易做出来的不能以后忘记了(手动狗头)。这里博主还在B站上发布了效果视频,大家感兴趣的话可以看一下。其中解决了先验框标注位置不对,或者出现非常多的框的问题

weixin_51651698的博客 2万+

常量指针与非常量指针转换

这里先看如下代码 const int * p = NULL; 常量转换,第一层含义是,将常量转化为非常量,如下代码,可将p转化为非常量指针。 int * newp = const_cast<int *> (p); newp中保存的地址和p中保存的地址完全一样,唯一区别是,newp不再是一个常量指针了。 常量转换,第二层含义是,将非常量转化为常量,具体代码如下 int * p2 = NULL; const int * newP2 = const_cast<const int *&g

qq_43691704的博客 1952

Synopsys逻辑工艺库(DC综合)

逻辑库包括仅与综合过程有关的信息且通过DC用于设计的综合和优化。这一信息包括引脚到引脚的时序、面积、引脚类型和功耗以及其他DC需要的必须数据。逻辑库是一个文本(通常扩展名".lib"),通过使用Library Compiler(LC)编译生成带有扩展名名".db"的二进制文件。以SMIC的逻辑综合库为例:库文件下载地址。

baidu_34971492的博客 2422

nRF52832——大量数据传输时导致蓝牙断开连接,且无法被搜索到的解决方案(广播参数的设置、程序设计方法)

有时蓝牙通信单次发送数据量较大,且连续发送多次的时候,你会发现蓝牙就会出现异常,可能运行30min,40min,或者1h后,蓝牙就不能传输数据了,且无法被搜索到,用主机扫描蓝牙时可能会提示类似这样的DEBUG信息:bta_gattc_mark_bg_conn unable to find the bg connection mask for bd_addr=xx:xx:xx:xx:xx:xx。

数字世界 万物互联 2004

golang 的指针和非指针方法的见解

值类型的变量和指针类型的变量先声明一个结构体:type T struct { Name string }func (t T) M1() { t.Name = "name1" }func (t *T) M2() { t.Name = "name2" }M1() 的接收者是值类型 T, M2() 的接收者是值类型 *T , 两个方法内都是改变Name值。下面声明一个 T 类型的变

纵横四海的博客 5035

如何利用通达信进行选股集合操作

每个交易者实际上都有自己的选股策略,这是必然的,也会有自己的主观干预,但是还是需要从客观热点股票进行一个比对的,才能说主观和客观相结合不至于​偏离方向。 这几天我也发了节前最后一天我的选股策略盘中的选择结果, 我也从网上拿到了热点股票池,当拿到之后你会发现如何从几十个股票热点股票选出核心票,这就是个问题了,这里面一定要通过股价涨跌幅来进行过滤,而不是通过指标,因为一切指标都是根据价格变化而改变的了,所以​这一步不要走弯路。 1、把拿到的热点股票名单,导入通达信自定义板块 2、删除

抢财猫股票课堂 2581

swap()交换函数【引用】【指针】【指针引用】

swap()交换函数【引用】【指针】【指针引用】 涉及基础知识 C语言的变量,就是将系统分配的地址取个别名,所以变量名就是地址。 引用是一个变量的另一个名字,又称别名。 定义方式: int a=10; int &b=a; 在这里,意思就是给a变量起了一个新名字b,因此b不可再次被重新定义。 引用必须初始化,无空引用,并且引用不分等级。 函数的定义 类型 函数名(形参) { } 一、理解 1. 按值传递时,函数不会访问当前调用的实参,因此本体就不会交换,交换的只是通过函数形参复制过来的值

AISc_O的博客 3万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

C语言指针的用法——Swap交换函数

Swap交换函数 父函数调用子函数,子函数如果想要修改父函数的值,必须传指针(地址),子函数内必须要解引用 子函数的改变要想影响到父函数,必须传指针,解引用 1.传指针:相当于走到房间门口,知道房间的确切位置。 2.解引用:相当于打开房门,这可以对房间内部进行改造。 1 、未传指针 只在子函数中交换了a b的值,但对父函数无影响 void Swap_err1(int a,int b)//必...

weixin_44134202的博客 8875

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

用来实现交换的swap函数(交换指针 or 交换指针所指的值?)

如何用指针交换两个数的值? ——我们都知道使用swap函数。 以下两种swap函数,能否都能实现? void f1(int *a,int *b) { int *c; c=a; a=b; b=c; } void f2(int *a,int *b) { int c; c=*a; *a=*b; *b=*c; ...

weixin_44659133的博客 2371

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

通过函数,交换两个指针

1.值传递,改变只是局限于函数内部,当函数执行完毕后,既不交换指针的本身,即地址,也不交换指针所指的内容 //执行后既不交换指针,也不交换指针所指的内容 swap(int *p,int *q) { int *temp = p; p = q; q = temp; } 2.函数内部通过解引用修改指针所指的内容。 //该函数交换指针所指的内容 void swap(int *p,...

Firenze__的博客 935

关于交换函数的指针内容

首先让我们来写一个简单的交换函数:void Swap(int a,int b){    int tmp = a;    a = b;    b = tmp;    printf("%d,%d\n",a,b);}int main(){     int a = 10;     int b = 20;     printf("%d,%d\n",a,b);     Swap(a,b);     retur...

bu_xian的博客 1566

C语言函数调用指针交换值

int p; p = *a; *a = *b; *b = p; 可以发现函数调用前后还是函数执行前后地址都没有发生改变,值做了交换     int *p; *p = *a; *a = *b; *b = *p; 可以发现三个指针互换时,是不能交换值和地址的,只有中间*a = *b起到了作用,所以b的值给了a     int *p; p = a; a = b; b = p; 可以发现在函数里交换了地址,值做了交换,但只在当前函数生效, 但丝毫不影响主函数的值,因此在其他函数交换指

只是个人笔记,请见谅 2692

(指针详解1)例:用函数编写两个数的交换

​​​前言: 我们在初学c语言时都会遇到的一个题目,那就是交换两个数字的大小,我们需要定义两个变量保存两个值,再定义一个temp进行中间值保存 int temp=0; int a=10; int b=20; temp=a; a=b; b=temp; 那么在后面我们接触到了指针,我们该如何使用指针进行两个数的交换呢? 一、指针是什么 通过地址能找到所需的变量单元,我们可以说,地址指向该变量单元。 指针就是地址。 指针(地址)变量: 类型*变量名 储存的就是指针指针变量就是一个变...

oorik的博客 6942

通过指针函数实现交换

实现代码如下: void Swap(int* p1, int* p2) { int tmp; tmp = *p1; *p1 = *p2; *p2 = tmp; } int main() { int a = 10; int b = 20; Swap(&a,&b); printf("%d,%d\n",a,b); return 0; }

hefngs的博客 1057

c语言 通过调用函数交换两个实参指针的指向地址

指针作为形参如何改变实参指针指向的地址?         首先给出结论:需要借助二级指针。 下面以交换两个数的值的问题为例来进行说明:a = 5,b = 6;交换两个数的值。 错误做法: 用指针作为形参,交换a,b的值(这里通过交换指针地址的方式)。下面给出常见的错误代码: #include<bits/stdc++.h> using namespace std; void swap2(int *t1,int

小菲侠的博客 8120

指针函数-交换

描述 输入两个整数,交换它们并输出。 补充如下代码: #include <stdio.h> int main() { int x,y; void Swap(int *px,int *py); scanf("%d%d",&x,&y); Swap(&x,&y); printf(“x=%d,y=%d\n”,x,y); return 0; } //以下编写swa...

qq_45626896的博客 498

编写函数,交换两个int指针

1.值传递,改变只是局限于函数内部,当函数执行完毕后,既不交换指针的本身,即地址,也不交换指针所指的内容 //执行后既不交换指针,也不交换指针所指的内容 swap(int *p,int *q) { int *temp = p; p = q; q = temp; } 2.函数内部通过解引用修改指针所指的内容。 //该函数交换指针所指的内容 void swap(int...

qq_38619342的博客 1599

C++:用指针函数交换两个数

#include&amp;amp;lt;iostream&amp;amp;gt; void sw(int *p1,int *p2);//定义指针函数 using namespace std; int main() { int a=0,b=0; cin&amp;amp;gt;&amp;amp;gt;a&amp;amp;gt;&amp;amp;gt;b; int *p1=&amp;amp;amp;a,*p2=&amp;amp;a

weixin_43848357的博客 1300

利用函数实现数据值交换(指针变量)

利用函数实现数据值交换不使用函数实现直接赋值写函数利用指针变量写函数 不使用函数实现 数据交换值是一个非常简单的语句,我们在 不使用函数 的情况下可以这样: int a = 5;int b = 6;int num = 0; //定义两个数字a,b和一个中间变量实现数据交换 num = a; a = b; b = num; printf("%d %d\n", a, b);//依次输出a,b 我们发现初始化值的a,b在依次输出时数据发生了转换。 直接赋值写函数 让我们用同样的思路去利用函数

zhaocx111222333的博客 2769
上一篇: 关于指针
Lbuntu
博客等级 码龄10年 10粉丝 2原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值