C语言参数传递
//--------------------单向值传递------------------------ // 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语言参数传递的更多相关文章
- C语言参数传递(值传递、地址传递)+二级指针
参数传递 C语言参数传递一般分为:值传递和地址传递(本质上只有值传递) (注意:C语言中没有引用传递,C++才有引用传递,因为很多C语言环境是用C++编译器编译,使得C看起来支持引用传递,导致很多网上 ...
- R语言参数传递 按引用传递
R 语言的参数传递是按照引用传递的,二者共享内存 如果想要按值传递 使用函数 copy()
- C/C++语言参数传递----函数/方法 参数的指针引用传递
int m_value = 1; void func(int *p) { p = &m_value; } int main(int argc, char *argv[]) { int n = ...
- C语言之参数传递
学了四年的计算机,一直让自己比较苦恼的问题是C语言的参数传递问题,之所以说是苦恼,是因为在某年的一个学期,不幸接触到数据结构,光一个链表就把自己弄得死去活来的,而且自已一直就楞以为在操作的过程中,传递 ...
- 由链表初始化看C语言的二级指针
先来看C语言创建链表.插入节点和遍历链表的一段代码: #include <stdio.h> #include <stdlib.h> typedef int ElemType; ...
- 0.0C语言重点问题回顾
左值和右值得区别:左值是用来表明变量的身份的,右值更加侧重于值本身: void*是个例外,它只有基地址没有类型信息,所以无法解引用. int *p = malloc(100); char *s = m ...
- C/C++子函数参数传递,堆栈帧、堆栈参数详解
本文转载自C/C++子函数参数传递,堆栈帧.堆栈参数详解 导语 因为参数传递和汇编语言有很大联系,之后会出现较多x86汇编代码. 该文会先讲一下x86的堆栈参数传递过程,然后再分析C/C++子函数是怎 ...
- BlueZ
一.BlueZ在ubuntu PC上的基础应用 1.bluez的安装及基本功能 dong@ubuntu:~/bluez$ lsbluez-5.47.tar.xz SPP-loopback.pydo ...
- C语言中的参数传递
有空看看: c语言 函数传输传递的三种方式(值.指针.引用) C语言之参数传递 C语言形参和实参,传值调用和引用调用的区别
随机推荐
- AppDelegate关于应用程序挂起、复原与终止的代理方法
AppDelegate关于应用程序挂起.复原与终止的代理方法: 首次运行: - (BOOL)application:(UIApplication *)application didFinishLaun ...
- BZOJ 3230: 相似子串( RMQ + 后缀数组 + 二分 )
二分查找求出k大串, 然后正反做后缀数组, RMQ求LCP, 时间复杂度O(NlogN+logN) -------------------------------------------------- ...
- php install extension
wget http://nginx.org/download/nginx-1.8.0.tar.gz wget http://nginx.org/download/nginx-1.8.0.tar.gz ...
- codeforces 463C Gargari and Bishops
题目链接 这个题, 最主要的应该是找到对角线上的格子的关系. “ \" 这种对角线, 关系是x-y+n相等, ” / “ 这种, 关系是x+y相等.知道每个格子的两种对角线的值, 那么这个格 ...
- [LeetCode]题解(python):137-Single Number II
题目来源: https://leetcode.com/problems/single-number-ii/ 题意分析: 给定一个数组,数组里面每一个数字都出现了3次除了一个,找出那个数.要求时间复杂度 ...
- 字符串-06. IP地址转换
/* * Main.c * D6-字符串-06. IP地址转换 * Created on: 2014年8月19日 *******测试通过******** *转载:http://blog.csdn.ne ...
- Python2.7.3 学习——第一个程序 Hello Python World
Hello World 每学一门语言开始的第一程序都是Hello World ,当然了Python也不例外,下面开始我们的Python第一个程序编写: 1,命令行: (1)打开终端,输入python, ...
- QR Code簡介、介紹
QR Code為目前最常被使用的一種二維條碼,1994年由日本Denso-Wav e公司發明,QR是英文Qu ickResponse的縮寫,即快速反應的意思,1999年時,公布了符合日本當地的標準-「 ...
- [置顶] C++基础之六:运算符的重载
网上太多有关运算符的重载了,但是写的太过的详细,不适合新手入门,特别是那什么++和--的前增量后增量重载,一元二元运算符重载,特殊运算符,下标运算符,new和delete,甚至是指针运算符的重载,吓退 ...
- m文件转换为C/C++文件的编译、绘图、参数、打包问题总结
在工程计算相关项目中,常常利用Matlab来完成计算.算法.绘图等功能.使用Matlab来完成这些功能非常简单,Matlab提供的m编程语言功能强大,代码量少.为了在自己的C/C++项目中加入这些功能 ...