#include <stdio.h> void swap( int * p3, int * p4);
int main()
{ int a = 9;
int b = 8;
int * p1 = &a;
int * p2 = &b;
printf ( "%x %x\n" ,p1,p2);
swap(p1,p2);
printf ( "%d %d\n" ,a,b);
printf ( "%d %d\n" ,*p1,*p2);
printf ( "%x %x\n" ,p1,p2);
return 0;
} void swap( int * p3, int * p4)
{ int * t;
t = p3;
p3 = p4;
p4 = t;
} |
初学c的指针类型时,一定都会写这样一个程序,就是利用函数交换两个值。
上面的代码也是很容易想到的,但是这段代码的结果是错误的!!!原因是一个函数是不能有多个返回值的!!
如果有多个值要返回时,就要使用向上通信(即实参为变量的地址)的方法。
在单步调试的过程中,我们也能看到前后两次的地址是没有发生变化的。
如果你用单步调试,你可以看到的是p3和p4的值的确发生了变化,也就是说p3和p4指向的内存的确交换了,但是这种交换却没有影响到p1和p2,p1和p2指向的内存是没有发生变化的。
也就相当于swap函数只是做了p3和p4中存放的地址的值交换。
ps:在对地址(指针)直接进行操作的时候,可以把int * 看作是一个整体int,那么在对p3,p4的变化就相当于是对两个int型变量的变化,被调用函数中int型变量的变化如果不用返回值当然不能带回主函数,但如果使用返回值,却不能带回两个值,所以要使用指针类型。
关于swap函数传值的问题的更多相关文章
-
c++ swap 函数
转载地址 1,最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符. template <class T> void swap ( T& a, T& b ) { T ...
-
[转]谈谈C++中的swap函数
1,最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符. template <class T> void swap ( T& a, T& b ) { T c(a) ...
-
[020]转--C++ swap函数
原文来自:http://www.cnblogs.com/xloogson/p/3360847.html 1.C++最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符 template < ...
-
【转】 谈谈C++中的swap函数
1,最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符. template <class T> void swap ( T& a, T& b ) { T c(a) ...
-
自己写一个swap函数交换任意两个相同类型元素的值 对空指针的使用 字节大小的判断(二)了解原理
验证的代码: #include <stdio.h> int main(){ char c = 'z'; ) + (c << ) + () + 'a'; printf(" ...
-
swap函数的四种写法
swap 函数的四种写法 (1)经典型 --- 嫁衣法 void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } ( ...
-
jquery的ajax()函数传值中文乱码解决方法介绍
jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 代码如下: $.ajax({ dataType : ‘json', type : ‘POST', url : ‘http: ...
-
[java学习笔记]java语言基础概述之函数的定义和使用&;函数传值问题
1.函数 1.什么是函数? 定义在类中的具有特定功能的一段独立小程序. 函数也叫做方法 2.函数的格式 修饰符 返回值类型 函数名(参数类型 形式参数1, 参数类型 形式参数2-) { ...
-
[Effective C++ --025]考虑写出一个不抛异常的swap函数
引言 在我的上一篇博客中,讲述了swap函数. 原本swap只是STL的一部分,而后成为异常安全性编程的脊柱,以及用来处理自我赋值可能性. 一.swap函数 标准库的swap函数如下: namespa ...
随机推荐
-
Java反射机制实例解析
1.获取想操作的访问类的java.lang.Class类的对象 2.调用Class对象的方法返回访问类的方法和属性信息 3.使用反射API来操作 每个类被加载后,系统会为该类 ...
-
在node.js中使用mongose模块
对象与文档相对应 创建项目目录,用root进入 # mkdir /home/test/part9/ 直接# npm install mongoose,报错如下 ../node_modules/nan/ ...
-
Oracle ORA-01033: ORACLE initialization or shutdown in progress 错误解决办法
Oracle ORA-01033: ORACLE initialization or shutdown in progress 错误解决办法 登陆数据库时提示 “ORA-01033”错误在命令窗口以s ...
-
Android-webView的loadUrl
1 //打开本包内asset目次下的test.html文件 wView.loadUrl(" file:///android_asset/test.html "); 2 //打开本地 ...
-
自学Zabbix3.8.4-可视化Visualisation-Slide shows
Zabbix3.8.4-可视化Visualisation-Slide shows幻灯片 定义好screen之后,我们想了解服务器状况之时,一般会一个个screen点过去,zabbix提供了幻灯片展示方 ...
-
appium GUI介绍
Appium作为APP端的自动化测试工具,具有很多的有点,今天主要介绍一下它的UI界面,包含其中的一些参数等.主要说的是windows下的APPIUM GUI. 先看一眼它的界面(版本为1.4.16. ...
-
[luogu P3953] [noip2017 d1t3] 逛公园
[luogu P3953] [noip2017 d1t3] 逛公园 题目描述 策策同学特别喜欢逛公园.公园可以看成一张$N$个点$M$条边构成的有向图,且没有 自环和重边.其中1号点是公园的入口,$N ...
-
Git学习篇之git remote add origin错误
提示出错信息:fatal: remote origin already exists. 解决办法如下: 1.先输入$ git remote rm origin 2.再输入$ git remote ad ...
-
函数 day9
一,什么是函数? 函数的定义与调用 s = 'fkdsagadfdsagfdsagg' count = 0 for i in s: count += 1 print(count) l1 = [1,2, ...
-
Flexbox + js实现滑动拼图游戏
滑动拼图就是把一张图片分成几等份,打乱顺序(下图),然后通过滑动拼凑成一张完整的图片. 要实现一个拼图游戏,需要考虑怎样随机的打乱顺序,怎样交换两张图片的位置,等等.但是,使用了Flexbox布局以后 ...