形参实现一种数据传入的接口 ,由 实参 拷贝给 形参.
拷贝!!!!!!!!!!!
例1:
        void func(int tmp){         //意图是实现传进来的参数 +1
tmp++;
} int mian(){
int a = ;
func(a);
printf("%d\n",a); //输出结果还是 10, 并没有实现我们需要的功能
}
  解析:参数传递是拷贝的概念. 
    由于函数设计的时候, 形参是 int tmp, 执行的动作是将 a 的值 拷贝成 tmp, 传递后
    tmp = 10,  -->  tmp++;  -->  tmp = 11
       因为tmp 是由 a 拷贝出来的,是副本,改动副本并不会影响 a 数据本身,所以 a 的值并不会发生改变.
需求:我们确确实实想通过参数传递,来改变实参的内容.
例2:
   void func2(int *tmp){
  (*tmp)++;
} int main(){
a = ;
func2(&a);
printf("%d\n",a); //a = 11;
}
  解析:同样是拷贝,为什么func2 的设计让实参发生了改变?      
    因为 func2 拷贝的是 a 的地址, 把 a 的地址拷贝给 tmp ,这时候 *tmp 指向的也是 int a 这个空间
    在操作 *tmp 的时候,就是直接对这个空间内的数据进行改变,所以让 a 的值发生了改变
func1 是 值传递
func2 是 地址传递
值传递地址传递 本身不具备 某种特定的标签 在参数传递的过程 只有拷贝两个字 .
而拷贝什么东西 ,其实是由我们人为设计的.
 
拷贝 数值本身 ,就是创建数值副本,不会影响到原始数值,称作 值传递
拷贝 空间地址, 就是将 指针A 拷贝成 指针B, 指针B指向的空间是和指针A指向的空间是一样的,因为指针B是指针A的副本, 既然指针B能够操作这个空间,那自然能够改变这个空间里面的内容.
总结:
值传递:    int func1(int tmp){}    在保护原始数据的时候用值传递  缺点:拷贝空间本身,而非地址,创建副本耗费资源,不灵活
 
地址传递: int func2(int *tmp){}     好处:传递参数灵活, 拷贝的是指针,拷贝内容少,指针只有 int大小 .
 
空间传递: C语言函数篇(三)函数参数高级设计

C语言函数篇(二)函数参数基础设计的更多相关文章

  1. 大一C语言学习笔记(5)---函数篇-定义函数需要了解注意的地方;定义函数的易错点;详细说明函数的每个组合部分的功能及注意事项

    博主学习C语言是通过B站上的<郝斌C语言自学教程>,对于C语言初学者来说,我认为郝斌真的是在全网C语言学习课程中讲的最全面,到位的一个,这个不是真不是博主我吹他哈,大家可以去B站去看看,C ...

  2. python函数知识二 动态参数、函数的注释、名称空间、函数的嵌套、global,nonlocal

    6.函数的动态参数 *args,**kwargs:能接受动态的位置参数和动态的关键字参数 *args -- tuple *kwargs -- dict 动态参数优先级:位置参数 > 动态位置参数 ...

  3. c语言学习篇二【基础语法】

    一.定义常量: 使用 #define 预处理器. 使用 const 关键字. #include <stdio.h> int main() { const int LENGTH = 10;/ ...

  4. js 运动函数篇(二) (加速度运动、弹性运动、重力场运动(多方向+碰撞检测+重力加速度+能量损失运动)拖拽运动)层层深入

    前言:         本人纯小白一个,有很多地方理解的没有各位大牛那么透彻,如有错误,请各位大牛指出斧正!小弟感激不尽.         本篇文章为您分析一下原生JS写加速度运动.弹性运动.重力场运 ...

  5. R语言实战(二)——数据分析基础知识

    一.R中数据结构 1.数据集 通常是由数据构成的一个矩形数组,行 表示 观测(记录.示例),列 表示 变量(字段.属性) 2.R中的数据结构 3.向量 c()可以用来创建向量 > a <- ...

  6. SQl Server 函数篇 数学函数,字符串函数,转换函数,时间日期函数

    数据库中的函数和c#中的函数很相似 按顺序来, 这里价格特别的 print  可以再消息栏里打印东西 数学函数 ceiling()  取上限   不在乎小数点后面有多大,直接忽略 floor()   ...

  7. SQl Server 函数篇 聚合函数

    说一下数据库中的聚合函数 函数使用必须加小括号(), 5种聚合函数: 1.max最大值   select max(price) from car where code='c024'   --取这一列中 ...

  8. Python之函数对象、函数嵌套、名称空间与作用域、闭包函数、装饰器

    目录 一 函数对象 二 函数的嵌套 三 名称空间和作用域 四 闭合函数 五 装饰器 一.函数对象 1.函数是第一类对象 #第一类对象的特性:# 可以被引用 # 可以当做参数传递 # 返回值是函数 # ...

  9. ptyhon 编程基础之函数篇(二)-----返回函数,自定义排序函数,闭包,匿名函数

    一.自定义排序函数 在Python中可以使用内置函数sorted(list)进行排序: 结果如下图所示: 但sorted也是一个高阶函数,可以接受两个参数来实现自定义排序函数,第一个参数为要排序的集合 ...

随机推荐

  1. agc027D - Modulo Matrix(构造 黑白染色)

    题意 题目链接 构造一个\(n * n\)的矩阵,要求任意相邻的两个数\(a,b\),使得\(max(a,b) \% min(a,b) \not = 0\) Sol 我的思路: 假设\(mod = 1 ...

  2. 好用的切换滑动焦点图框架jquery.superslide

    拿到学习网站:http://www.superslide2.com/

  3. <Android 基础(七)> DrawerLayout and NavigationView

    介绍 DrawerLayout是Support Library包中实现了侧滑菜单效果的控件 android.support.v4.widget.DrawerLayout NavigationView是 ...

  4. Gradle 教程:第二部分,JAVA PROJECTS【翻译】

    原文地址:http://rominirani.com/2014/07/28/gradle-tutorial-part-2-java-projects/ 在这部分的教学中,我们会学习如何使用Gradle ...

  5. Java—运算符和流程控制语句

    运算符优先级: siwtch语句注意事项: switch 后面小括号中表达式的值必须是整型或字符型 case 后面的值可以是常量数值,如 1.2:也可以是一个常量表达式,如 2+2 :但不能是变量或带 ...

  6. Azure 7 月新公布

    Azure 7月新发布:Cosmos DB,事件中心捕捉功能,Hybrid Connections,流量管理器快速故障转移功能. 您现有的 DocumentDB 资源现已作为 Azure 门户上 Az ...

  7. Socket连接时,端口是怎么分配的

    socket 客户端连接socket 的端口每个是唯一的,每个新的连接,端口号+1 从1024-65534 最大到65534 然后再开始循环 中间遇到已经使用的端口就跳过

  8. 1.10 从表中随机返回n条记录

    同时使用内置函数的rand函数. limit 和order by: select * from emp order by rand() limit 2;

  9. 网格中的BFS,逆向(POJ2049)

    题目链接:http://poj.org/problem?id=2049 解题报告: 网格中的BFS,最主要的是边界问题. 1.这里在左右,上下两个方向上,分别判断墙,和门,细节是,向上有t个墙,for ...

  10. Centos下Yum安装PHP5.5,5.6

    默认的版本太低了,手动安装有一些麻烦,想采用Yum安装的可以使用下面的方案: 1.检查当前安装的PHP包 yum list installed | grep php 如果有安装的PHP包,先删除他们 ...