#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函数传值的问题的更多相关文章

  1. c++ swap 函数

    转载地址 1,最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符. template <class T> void swap ( T& a, T& b ) { T ...

  2. [转]谈谈C++中的swap函数

    1,最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符. template <class T> void swap ( T& a, T& b ) { T c(a) ...

  3. [020]转--C++ swap函数

    原文来自:http://www.cnblogs.com/xloogson/p/3360847.html 1.C++最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符 template < ...

  4. 【转】 谈谈C++中的swap函数

    1,最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符. template <class T> void swap ( T& a, T& b ) { T c(a) ...

  5. 自己写一个swap函数交换任意两个相同类型元素的值 对空指针的使用 字节大小的判断(二)了解原理

    验证的代码: #include <stdio.h> int main(){ char c = 'z'; ) + (c << ) + () + 'a'; printf(" ...

  6. swap函数的四种写法

    swap 函数的四种写法 (1)经典型 --- 嫁衣法 void swap(int *a, int *b) { int temp; temp = *a; *a = *b; *b = temp; } ( ...

  7. jquery的ajax()函数传值中文乱码解决方法介绍

    jquery的ajax()函数传值中文乱码解决方法介绍,需要的朋友可以参考下 代码如下: $.ajax({ dataType : ‘json', type : ‘POST', url : ‘http: ...

  8. [java学习笔记]java语言基础概述之函数的定义和使用&函数传值问题

    1.函数 1.什么是函数? 定义在类中的具有特定功能的一段独立小程序. 函数也叫做方法 2.函数的格式 修饰符   返回值类型    函数名(参数类型  形式参数1, 参数类型  形式参数2-) { ...

  9. [Effective C++ --025]考虑写出一个不抛异常的swap函数

    引言 在我的上一篇博客中,讲述了swap函数. 原本swap只是STL的一部分,而后成为异常安全性编程的脊柱,以及用来处理自我赋值可能性. 一.swap函数 标准库的swap函数如下: namespa ...

随机推荐

  1. istringstream、ostringstream、stringstream 类简介

    本文系转载,原文链接:http://www.cnblogs.com/gamesky/archive/2013/01/09/2852356.html ,如有侵权,请联系我:534624117@qq.co ...

  2. Android图片上传问题小结

    1.图片的显示 出现OOM,原因一般为图片太大, 直接进行尺寸压缩即可. 2.图片的上传(服务器有大小限制) 出现OOM,原因一般为图片太大, 做一次尺寸压缩, 再做一次质量压缩,压缩质量(0-100 ...

  3. hashmap实现原理浅析

    看了下JAVA里面有HashMap.Hashtable.HashSet三种hash集合的实现源码,这里总结下,理解错误的地方还望指正 HashMap和Hashtable的区别 HashSet和Hash ...

  4. wp8 入门到精通 仿美拍评论黑白列表思路

    static bool isbool = false; private void BindGameDelete() { Tile tile = new Tile(); List<Color> ...

  5. Inno Setup 版本 5.5.3+ 简体中文语言包

    ; *** Inno Setup 版本 + 简体中文消息 *** [LangOptions] LanguageName=<7B80><4F53><> Languag ...

  6. Android 笔记 day2 拨号器

  7. IDF实验室:牛刀小试

    被改错的密码[从格式和长度来推测出是MD5] 迷醉..人生第一道ctf题?据说是因为看起来像是MD5加密的格式,但是数了一下发现有33个字符,就推测???熊孩子多敲了一位进去.从32个变33个了,然后 ...

  8. 互联网+下PDA移动智能手持POS超市收银开单软件

    是一套专为中小超市.专卖店设计的收银管理软件,广泛应用于中小超市(百货商店).化妆品店.婴幼儿用品店.玩具店.保健品店.茶叶店. 电器.文具图书.手机通讯器材店等行业的中小型店面店铺.该系统具有完善的 ...

  9. Node.js-部署【1】-防火墙端口的配置

    原来以为,Node.js部署以后,要手动配置防火墙端口,结果不需要,外网可以访问,看来是自动配好了,真是考虑周到,给我一个大大的惊喜.

  10. CentOS 7部署Node.js+MongoDB:在VPS上从安装到Hello world

    写好代码,花钱买了VPS,看着Charges一直上涨却无从下手?记一位新手司机从购买VPS到成功访问的过程 0.购买VPS 首先,选择VPS提供商,部署一个新的服务器(Deploy New Serve ...