形参实现一种数据传入的接口 ,由 实参 拷贝给 形参.
拷贝!!!!!!!!!!!
例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. 从0到1构建适配不同端(微信小程序、H5、React-Native 等)的taro + dva应用

    从0到1构建适配不同端(微信小程序.H5.React-Native 等)的taro + dva应用 写在前面 Taro 是一套遵循 React 语法规范的 多端开发 解决方案.现如今市面上端的形态多种 ...

  2. canvas的arcTo API

  3. jquery-fullpage插件

    jquery fullpage.js全屏滚动插件/jquery-easing插件 // 前端自动化工具安装插件 在页面引入: <link rel="stylesheet" h ...

  4. 跨平台图表控件TeeChart使用教程:导入XML数据

    TeeChart的最新版中包含了一个自动加载XML数据的新组件.这个组件的名字叫做TTeeXMLSource,用户可以在TeeXML.pas unit中找到这个组件. 加载XML图表所需的最小属性是& ...

  5. One special dictionary

    由于项目一个功能需要,可以将关键字的值叠加加来,最终可以获取对这些关键字都做了些什么操作. Generic Programming is very powerful. /// <summary& ...

  6. uLua学习之HelloWorld(一)

    前言 好久都没有写过文章了,现在正好在看有关unity3d的热更新方案,在网上找了很久,发现了ulua这个插件,感觉还是不错的,反正自己是个初学者,多了解一些知识应该是没有什么问题的.说起ulua,就 ...

  7. chrome浏览器设置12px以下字体大小

    内容很简单 在 body 上添加一个 css 属性即可. .body { -webkit-text-size-adjust: none; } 结束,晚安!

  8. bootstrap-table 大量字段整体表单上传之时间处理

    js 中用$('#addUserForm').serialize(),//获取表单中所有数据 传送到前台 (controller) $.ajax({ type : "POST", ...

  9. git github添加远程仓库出错 remote origin already exists

    在github上建立了仓库后,执行 git remote add origin https://github.com/zhangsan/sample.git时,提示 remote origin alr ...

  10. 12/13 exercise

    gcc -[cog] gcc   pro1.o   pro2.o      //create a executable file x.out if unnamed