函数

C语言中函数参数传递时,将实参的值拷贝到函数参数的存储区中。这种传递参数的方式称为按值传递。

函数不会访问实参本身,访问的是函数存储在栈区的副本,不会改变实参.函数凋用结束,函数在栈区的内容释放.

若要改变实参本身.需用指针传递待修改变量的地址,使函数参数保存该变量地址的值。然后在函数中,通过参数保存的地址间接访问待修改的变量。大部分书籍,将这种做法称为按址传递或按引用传递。实际上,这种传递方式仍然是按值传递,只不过传递的是地址的值。

非void的函数,返回值不能做为左值.

因为函数返回值是常量,不是变量.

数组传递给函数:

不会保留数组的副本,保留的是数组首地址.的副本

常常有另一个参数一起传递进去,数组的末尾地址或者数组的长度。

函数指针:

存储函数首地址的指针变量.

函数名可以表示函数首地址.即表示函数的入口.

常作为函数的参数使用.

初始化办法:

Int f(char ,double)

Int (*p)(char, double ) =f;

//指针与函数需返回类型一致 int

//需参数列表一致 char double

int array[10] = {0};

int less1(int,int);//排序方式1

int greater(int,int);//排序方式2

int less2(int,int);//排序方式3

void sort(int*,int,(*)(int,int));

sort(array,10,less1)  //int*   int类型地址=int数组名,(*)(int,int)  两个int参数的地址=两个int参数的函数名 ,表示地址

          //或将使用指针数组,初始化各个排序方式名字,再传参调用

sort(array,10,greater)

sort(array,10,less2)

函数的调用和递归

主调函数、被调函数

函数调用发生时,

主调函数的信息会作为一条活动记录入栈(瑞萨调试工具中可以看到过多层、后入先出)

活动信息:返回值,自动局部变量,函数名等

函数调用结束会将控制权返回给主调函数。

函数总能在多层嵌套的栈中找到其主调函数的信息

递归函数:直接或者间接调用自己的函数称为递归函数.需要设置正确的结束条件

内存分配:

注意 ‘返回栈内存’ 错误:

错误例:

u8 ex()

{

int p =233;

return p;

}

p是局部变量,在栈中,在外部调用时,局部变量的值已经销毁,返回一个无效值。

(可能跟编译器有关系,待确定

C语言随笔5:函数、函数指针的更多相关文章

  1. C语言 第八章 函数、指针与宏

    一.函数 函数是一个包含完成一定功能的执行代码段.我们可以把函数看成一个"黑盒子", 你只要将数据送进去就能得到结果, 而函数内部究竟是如何工作的的, 外部程序是不知道的.外部程序 ...

  2. 【C语言】14-返回指针的函数与指向函数的指针

    前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如 ...

  3. C语言函数指针变量和指针函数以及指针数组

    C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址.我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数.然后通过指针变量就可以找到并调用这 ...

  4. 【嵌入式开发】C语言 命令行参数 函数指针 gdb调试

    . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21551397 | http://www.hanshul ...

  5. C语言的抽象与函数指针--思想(转)

    一.何为抽象? 从小到大,我们接触到的抽象,最熟悉的莫过于数学了.为什么这样说呢? 比如说,在小学的时候,老师总是拿了几个苹果来引诱我们:同学们,这里有几个苹果啊?于是我们流着口水一个个地数,一个苹果 ...

  6. 【C语言】-返回指针的函数与指向函数的指针

    本文目录 前言 一.返回指针的函数 二.指向函数的指针 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.i ...

  7. C语言 命令行参数 函数指针 gdb调试

    . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21551397 | http://www.hanshul ...

  8. C语言中函数和指针的參数传递

    近期写二叉树的数据结构实验.想用一个没有返回值的函数来创建一个树,发现这个树就是建立不起来,那么我就用这个样例讨论一下c语言中指针作为形參的函数中传递中隐藏的东西. 大家知道C++中有引用的概念,两个 ...

  9. C语言学习笔记--函数与指针

    1. 函数类型 (1)C 语言中的函数有自己特定的类型,这个类型由返回值.参数类型和参数个数共同决定.如 int add(int i,int j)的类型为 int(int,int). (2)C 语言中 ...

随机推荐

  1. php中的require和include区别

    require是无条件包含也就是如果一个流程里加入require,无论条件成立与否都会先执行require 1.require 的使用方法如 require("MyRequireFile.p ...

  2. MyBatis 中 Mapper 接口的使用原理

    MyBatis 中 Mapper 接口的使用原理 MyBatis 3 推荐使用 Mapper 接口的方式来执行 xml 配置中的 SQL,用起来很方便,也很灵活.在方便之余,想了解一下这是如何实现的, ...

  3. 0002 Django工程创建

    1 创建一个目录,用于专门存放Django工程的虚拟环境 PyCharm默认虚拟环境在工程内,从而导致打包的时候,会把虚拟环境一起打包. 同时,虚拟环境中的插件较多,一个工程创建了一个虚拟环境,以后, ...

  4. Common Subsequence POJ - 1458 最长公共子序列 线性DP

    #include <iostream> #include <algorithm> #include <string> #include <cstring> ...

  5. STL标准库面试题(转)

    一.vector的底层(存储)机制 二.vector的自增长机制 三.list的底层(存储)机制 四.什么情况下用vector,什么情况下用list 五.list自带排序函数的排序原理 六.deque ...

  6. PP: A multi-horizon quantile recurrent forecaster

    2017 NIPS, time series workshop traditional methods: ARIMA. Seq2Seq quantile forecast; RELATED WORK ...

  7. Attention machenism

    from attention mechanism Attention is one component of a network’s architecture, and is in charge of ...

  8. TensorFlow 2.0高效开发指南

    Effective TensorFlow 2.0 为使TensorFLow用户更高效,TensorFlow 2.0中进行了多出更改.TensorFlow 2.0删除了篇冗余API,使API更加一致(统 ...

  9. Suggestions On Setting LED Holiday Light

    We all like the cheerful glow of holiday lights, so the process goes seamless from start to finish. ...

  10. Linux_oracle 数据库监听

    su - oracle  //切换到oracle用户模式下 cd $ORACLE_home/bin //进入oracle安装目录 lsnrctl start //启动监听 lsnrctl status ...