//--------------------单向值传递------------------------

 // swap这个方法在被调用时,给形参a,b分配了空间
// 主调函数将【数值】传递给【形参】
// 形参完成操作之后并不能将值传回给主调函数
// 形参的生命周期仅仅在方法体中
/* void swap(int a , int b)
{
int tmp = a;
a = b;
b = tmp;
}*/
//-----------------------验证程序------------------------
/*
int x(6) , y(7);
cout << "交换值以前的地址:x=" << &x << "y=" << &y << endl;
cout << "交换值以前的值:x=" << x << "y=" << y << endl;
swap(x , y);
cout << "交换值以后的地址:x=" << &x << "y=" << &y << endl;
cout << "交换值以后的值:x=" << x << "y=" << y << endl;
*/
//------------------------------------------------------- //--------------------单向值(指针)传递------------------------
// 同值传递是一个道理
// 传进来的指针变量被形参接收
// 形参在执行完方法之后无法传回主调函数中
//void swap(int *a , int *b)
//{
// int *tmp = a;
// a = b;
// b = tmp;
//}
//-----------------------验证程序------------------------
/*
int x(6) , y(7);
cout << "交换值以前的地址:x=" << &x << "y=" << &y << endl;
cout << "交换值以前的值:x=" << x << "y=" << y << endl;
swap(&x , &y);
cout << "交换值以后的地址:x=" << &x << "y=" << &y << endl;
cout << "交换值以后的值:x=" << x << "y=" << y << endl;
*/
//------------------------------------------------------- //--------------------地 址 传 递------------------------ // 形参接收到了主调函数传递的参数
// 形参a将主调函数传递过来的【指针变量】指向的【内存地址】的【数值】赋予被调函数中的临时变量tmp
// 形参b将【指针变量】指向的【内存空间】中的【数值】赋予形参a存储的【指针变量】指向的【内存空间】
// 临时变量tmp将【数值】赋予形参b存储的【指针变量】指向的【内存空间】
// 因为是【直接】对【指针变量】指向的【内存空间】中的【数值】进行修改,所以达到了所谓的双向传值
//void swap(int *a , int *b)
//{
// int tmp = *a;
// *a = *b;
// *b = tmp;
//}
//-----------------------验证程序------------------------
/*
int x(6) , y(7);
cout << "交换值以前的地址:x=" << &x << "y=" << &y << endl;
cout << "交换值以前的值:x=" << x << "y=" << y << endl;
swap(&x , &y);
cout << "交换值以后的地址:x=" << &x << "y=" << &y << endl;
cout << "交换值以后的值:x=" << x << "y=" << y << endl;
*/
//------------------------------------------------------- //---------------动态分配内存空间实现值交换----------------
// 定义俩指针变量x,y
// 分别对他们进行动态分配内存空间
// x , y 仅为1字节的指针变量,指向了两个分配好的空间上
// 将x,y的值进行互换者达到了交换值的效果
/*
int* x ,* y; x = (int*)malloc(sizeof(int));
y = (int*)malloc(sizeof(int)); *x = 6;
*y = 7; cout << "交换值以前的地址:x=" << x << "y=" << y << endl;
cout << "交换值以前的值:x=" << *x << "y=" << *y << endl; int *tmp;
tmp = x;
x = y;
y = tmp; cout << "交换值以后的地址:x=" << x << "y=" << y << endl;
cout << "交换值以后的值:x=" << *x << "y=" << *y << endl;
*/

还有一点没弄明白就是如下代码在【静态分配内存】的时候为什么不能用改变【内存空间】的【地址】来达到【数值】交换的效果???!!!

看官有和妙解请不吝赐教..

 //--------------------单向值(指针)传递------------------------
// 同值传递是一个道理
// 传进来的指针变量被形参接收
// 形参在执行完方法之后无法传回主调函数中
//void swap(int *a , int *b)
//{
// int *tmp = a;
// a = b;
// b = tmp;
//}
//-----------------------验证程序------------------------
/*
int x(6) , y(7);
cout << "交换值以前的地址:x=" << &x << "y=" << &y << endl;
cout << "交换值以前的值:x=" << x << "y=" << y << endl;
swap(&x , &y);
cout << "交换值以后的地址:x=" << &x << "y=" << &y << endl;
cout << "交换值以后的值:x=" << x << "y=" << y << endl;
*/
//-------------------------------------------------------

C语言参数传递的更多相关文章

  1. C语言参数传递(值传递、地址传递)+二级指针

    参数传递 C语言参数传递一般分为:值传递和地址传递(本质上只有值传递) (注意:C语言中没有引用传递,C++才有引用传递,因为很多C语言环境是用C++编译器编译,使得C看起来支持引用传递,导致很多网上 ...

  2. R语言参数传递 按引用传递

    R 语言的参数传递是按照引用传递的,二者共享内存 如果想要按值传递 使用函数 copy()

  3. C/C++语言参数传递----函数/方法 参数的指针引用传递

    int m_value = 1; void func(int *p) { p = &m_value; } int main(int argc, char *argv[]) { int n = ...

  4. C语言之参数传递

    学了四年的计算机,一直让自己比较苦恼的问题是C语言的参数传递问题,之所以说是苦恼,是因为在某年的一个学期,不幸接触到数据结构,光一个链表就把自己弄得死去活来的,而且自已一直就楞以为在操作的过程中,传递 ...

  5. 由链表初始化看C语言的二级指针

    先来看C语言创建链表.插入节点和遍历链表的一段代码: #include <stdio.h> #include <stdlib.h> typedef int ElemType; ...

  6. 0.0C语言重点问题回顾

    左值和右值得区别:左值是用来表明变量的身份的,右值更加侧重于值本身: void*是个例外,它只有基地址没有类型信息,所以无法解引用. int *p = malloc(100); char *s = m ...

  7. C/C++子函数参数传递,堆栈帧、堆栈参数详解

    本文转载自C/C++子函数参数传递,堆栈帧.堆栈参数详解 导语 因为参数传递和汇编语言有很大联系,之后会出现较多x86汇编代码. 该文会先讲一下x86的堆栈参数传递过程,然后再分析C/C++子函数是怎 ...

  8. BlueZ

    一.BlueZ在ubuntu PC上的基础应用 1.bluez的安装及基本功能 dong@ubuntu:~/bluez$ lsbluez-5.47.tar.xz   SPP-loopback.pydo ...

  9. C语言中的参数传递

    有空看看: c语言 函数传输传递的三种方式(值.指针.引用) C语言之参数传递 C语言形参和实参,传值调用和引用调用的区别

随机推荐

  1. iOS手机号正则表达式并实现344格式 (正则的另一种实现方式)

    [Demo下载地址]https://git.oschina.net/remainedmute/PhoneNumDemo.git 相关博客http://www.jianshu.com/p/00da4d8 ...

  2. URL编码解码

    ios url 编码和解码 1.url编码 ios中http请求遇到汉字的时候或者像是%…@#¥%&*这些字符的时候也可以使用下面的方法,需要转化成UTF-8,用到的方法是: NSString ...

  3. WinSock网络编程基础(3)server

    上一篇讲的是简单的发送数据的客户端的实现.接下来讲的是如何实现收发数据服务器.这里说的服务器其实就是一个进程,它需要等待任意数量的客户端与之建立起连接,以便响应它们的请求. 服务器必须在已知的名称上监 ...

  4. linux install nginx error

    1 2 3 4 5 6 7 8 9 10 11 [mahao01@127.0.0.1 nginx-1.2.9]$ make make -f objs/Makefile make[1]: Enterin ...

  5. Java Web 部署到Tomcat

    1.在conf目录中,新建Catalina(注意大小写)\localhost目录,在该目录中新建一个xml文件,名字可以随意取,只要和当前文件中的文件名不重复就行了,该xml文件的内容为: <C ...

  6. 决策树ID3算法[分类算法]

    ID3分类算法的编码实现 <?php /* *决策树ID3算法(分类算法的实现) */ /* *求信息增益Grain(S1,S2) */ //-------------------------- ...

  7. WebWorker SharedWorker ServiceWorker

    WebWorker 是什么? 为 JavaScript 引入线程技术 不必再用 setTimeout().setInterval().XMLHttpRequest 来模拟并行 Worker 利用类似线 ...

  8. Groovy在不同JDK版本下的性能差异

    Groovy作为一种动态语言,性能和JAVA比肯定是差不少,根据网友的测试,由于测试环境,场景和编译参数的不同,大概有差2到7倍的差距 那么同样的Groovy,在不同的JDK版本下,会有着怎样的差异呢 ...

  9. lambda表达式和闭包

    lambda表达式和闭包 熟悉的Javascript或者Ruby的同学,可能对另一个名词:闭包更加熟悉.因为一般闭包的示例代码,长得跟lambda差不多,导致我也在以前很长一段时间对这两个概念傻傻分不 ...

  10. Uva 1612 Guess

    Thinking about it: 题目要求最后一名(也就是第N位)的分数要尽量的大,那么就一定要求第N-1名的分数也要尽量大.假如N-1可以取400和500,那么N-1应该取500,如果取400, ...