函数

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. 下载 Microsoft JDBC driver 7.2 for SQL Server

    下载 Microsoft JDBC driver 7.2 for SQL Server:https://www.microsoft.com/zh-cn/download/confirmation.as ...

  2. brew 安装 yarn 时候失败

    1.mac 安装 brew install yarn 报错 Error: Failure while executing; `git config --local --replace-all home ...

  3. archlinux install.txt

    ++++++ 注意事项+++ +++++++++++++++++++++++++++ 强烈建议新手移步 Arch Wiki > 新手指南 经验者请参阅 Arch Wiki > 安装指南 若 ...

  4. SVN的使用01

    关于svn的使用以及TortoiseSVN常见操作 一.关于svn介绍 在介绍之前提一下,MyEclipse项目组的建立,以及源文件夹的创建. 新建的那一栏点击other 在搜索栏中搜索Java Wo ...

  5. [十二省联考2019] 异或粽子 - 可持久化Trie,堆

    求 \(n\) 元数列的 \(k\) 个不同的子区间使得各个子区间异或和之和最大. Solution (差点又看错题了) 做个前缀和,于是转化成求序列异或和最大的 \(k\) 个数对 建一棵可持久化 ...

  6. C++ 获取当前正在执行的函数的相关信息(转)

    该功能用在日志打印中 原文地址:C++ 获取当前正在执行的函数的相关信息

  7. SpringBoot学习- 3、整合MyBatis

    SpringBoot学习足迹 1.下载安装一个Mysql数据库及管理工具,同类工具很多,随便找一个都可以,我在windows下做测试项目习惯使用的是haosql 它内部集成了MySql-Front管理 ...

  8. eclipse怎么debug项目

    1.打断点,服务器debug启动 2.debug:打断点,加项目.f5:进入方法    f6:下一行代码   f8:执行到下一个断点处

  9. 四、CentOS 7安装Oracle JDK

    CentOS 7安装Oracle JDK,查看Linux是否自带的JDK,如有openJDK,则卸载  CentOS7.1 JDK安装 1.卸载自带OPENJDK    用 java -version ...

  10. 洛谷P1086 花生采摘

    https://www.luogu.org/problem/P1086 #include <bits/stdc++.h> using namespace std; typedef long ...