C语言参数传递

时间:2022-09-25 14:38:42
 //--------------------单向值传递------------------------

 // 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语言参数传递(值传递、地址传递)&plus;二级指针

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

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

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

  3. C&sol;C&plus;&plus;语言参数传递----函数&sol;方法 参数的指针引用传递

    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&period;0C语言重点问题回顾

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

  7. C&sol;C&plus;&plus;子函数参数传递,堆栈帧、堆栈参数详解

    本文转载自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. Android Studio NDK初探

    Android Studio中实现NDK开发较之前Eclipse+Cygwin,方便了很多. 本文以最简单的从C程序中获取字符串,并显示到MainActivity的TextView上为例进行NDK开发 ...

  2. apche配置后报错(Forbidden)没有权限

    apche如何配置虚拟目录及虚拟目录的权限 <Directory /> Options FollowSymLinks AllowOverride None Order deny,allow ...

  3. Linq To Sql 语法 子查询 &amp&semi; In &amp&semi; Join

    子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 =from cin ctx.Customers                    where                  ...

  4. BZOJ 4408 神秘数

    题解同各神犇的方法... #include<iostream> #include<cstdio> #include<cstring> #include<alg ...

  5. mysql导入数据load data infile用法

    mysql导入数据load data infile用法 基本语法: load data [low_priority] [local] infile 'file_name txt' [replace | ...

  6. Maven 新手入门&plus;命令大全

    Maven 是一个项目管理工具,可以对 Java 项目进行构建.依赖管理. Maven 官方文档(English): http://maven.apache.org/index.html Maven ...

  7. 利用StopWatch类监控Java代码执行时间并分析性能

    springframework中的StopWatch类可以测量一个时间间隔的运行时间,也可以测量多个时间间隔的总运行时间.一般用来测量代码执行所用的时间或者计算性能数据,在优化代码性能上可以使用Sto ...

  8. Java对MongoDB中的数据查询处理

    Java语言标准的数据库时MySQL,但是有些时候也会用到MongoDB,这次Boss交代处理MongoDB,所以讲代码以及思路记录下了 摸索的过程,才发现软件的适用还是很重要的啊!!! 我连接的Mo ...

  9. 基于JEECG的代码模板自动生成

    1.基于JEECG3.5.2,提供多种数据源的代码生成,目前支持Oracle良好: 2.可动态配置数据源: 可动态配置模板集合,基于freemarker的模板文件: 可选择需要生成的数据表: 可导入一 ...

  10. Camel Games借助AWS在爆发式增长中提供优质游戏体验

    关于Camel Games Camel Games 成立于2009年,是中国首家得到google市场官方认证的顶尖开发公司.长期以来,Camel Games始终依靠于率先的技术背景,致力于成为国际一流 ...