函数

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. File FileStream StreamReader和StreamWriter

    File 静态类 ReadAllBytes 和 WriteAllBytes ,用于一次性全部读取和写入小文件的字节码,                  ReadLine  ReadkAll  用于一 ...

  2. 1.mysql卸载重新安装问题

    前言:在开发过程中,MySQL数据库是很频繁使用的数据库,但是有时候,数据库一单出错,或者其他原因,想要重装数据库,难免会遇到MySQL重装之后服务启不来,,下面我就跟大家讨论下如何干净的卸载MySQ ...

  3. ALSA lib-ext plugin

    参考pcm_speex.c #include <stdio.h> #include <string.h> #include <unistd.h> #include ...

  4. MFC使用LoadBitmap方法加载位图文件失败解决方案(转)

    用如下方法在原项目中使用LoadBitmap方法加载已有的位图资源作为背景没有问题,但放在别的项目中总是加载不出来,该函数返回NULL HBITMAP hBitmap=LoadBitmap((HINS ...

  5. resize函数

    #include<opencv2/opencv.hpp>#include<opencv2/highgui.hpp> using namespace cv;using names ...

  6. python 数组格式转换

    格式转换 arr1 = [ {'name': 'jack', 'hobby': '西瓜'}, {'name': 'jack', 'hobby': '冬瓜'}, {'name': 'rose', 'ho ...

  7. 题解【洛谷P1886】滑动窗口 /【模板】单调队列

    题面 单调队列模板题. 单调队列可以从队首和队尾出队. 队列中的元素大小具有一定的顺序. 具体可参考这一篇题解 #include <bits/stdc++.h> #define itn i ...

  8. K3/Cloud点击按钮打开第三方URL

    public override void AfterBarItemClick(BOS.Core.DynamicForm.PlugIn.Args.AfterBarItemClickEventArgs e ...

  9. jqGrid colModel 参数(来自中文手册)

    jqGrid colModel 参数 ColModel 是jqGrid里最重要的一个属性,设置表格列的属性. 属性 数据类型 备注 默认值 align string left, center, rig ...

  10. 在多租户(容器)数据库中如何创建PDB:方法2 克隆本地PDB

    基于版本:19c (12.2.0.3) AskScuti 创建方法:克隆本地PDB(从本地其他PDB创建新的PDB) 对应路径:Creating a PDB --> Cloning --> ...