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语言形参和实参,传值调用和引用调用的区别
随机推荐
- SSIS: 把存储在数据库中的图片导出来
Data Flow Task Step 1 获取二进制图片数据 )='C:\labs\Images\' SELECT ThumbNailPhoto,@path+ThumbnailPhotoFileNa ...
- (转)MapReduce 中的两表 join 几种方案简介
1. 概述 在传统数据库(如:MYSQL)中,JOIN操作是非常常见且非常耗时的.而在HADOOP中进行JOIN操作,同样常见且耗时,由于Hadoop的独特设计思想,当进行JOIN操作时,有一些特殊的 ...
- 《JavaScript+DOM编程艺术》的摘要(一)---基本知识点
保持良好的编程习惯:在同一脚本中,保持引号的一致性,都用单引 var mood = "don\"t worry";alert(mood); 数组:var arr=Arra ...
- python 发送安全邮件
用python 写了一个发送邮件的脚本,配上host 和端口,发现一直报错: smtplib.SMTPException: No suitable authentication method foun ...
- latex 批量注释
在LaTex中的注释有3种方法: 1. 右键单击选中要注释的文本,选择 Insert Comment ,WinEdt 就会自动给选定的行添加 % ,完成段落文本的注释: 右键单击选中已经注释的文本,选 ...
- HTML禁止使用右键
<html> <script type="text/javascript"> <!-- document.oncontextmenu=function ...
- Codeforces 700B Connecting Universities(树形DP)
[题目链接] http://codeforces.com/problemset/problem/700/B [题目大意] 给出 一棵n个节点的树, 现在在这棵树上选取2*k个点,两两配对,使得其配对的 ...
- openssl命令行Base64编解码
openssl对base64编解码的规范支持较差,用它编解码的结果别的语言如php处理很不方便,注意的几点整理如下 1,如果php加密结果做base64编码长度小于64,则需要添加一个换行符opens ...
- HDU5280 Senior's Array(简单DP)
题目链接:pid=5280">传送门 题意: 给定一个长度为n的序列,和一个改动的值p,必须从原序列中选一个位置改动成p, 求改动后的区间和的最大值. 分析: 枚举位置+最大区间和. ...
- iOS中运用正则表达式
iOS中运用正则表达式来匹配短信验证码,电话号码,邮箱等是比较常见的. 在iOS中运用正则表达式主要有三种方式: -:通过谓词下面是实例代码: - (BOOL)regularExpresionWith ...