一、函数的定义

可以分为以下两种:

1、函数声明和函数定义分离

这种方法将函数声明和函数定义分开,通常在头文件中先声明函数原型,然后在源文件中实现函数定义。

例如,头文件 example.h 中声明了一个函数 add:

#ifndef EXAMPLE_H
#define EXAMPLE_H int add(int a, int b); // 声明函数原型 #endif //EXAMPLE_H

然后在源文件 example.c 中实现函数定义:

#include "example.h"
int add(int a, int b) { // 实现函数定义
return a + b;
}

这种方法可以使得代码更加模块化,便于维护和重用。

函数声明和函数定义结合在一起

这种方法将函数声明和函数定义结合在一起,通常在源文件中直接实现函数定义。

int sub(int a, int b) {  // 函数声明和定义结合在一起
return a - b;
}

这种方法比较简单,但是当函数需要在多个源文件中使用时,需要在每个源文件中都复制一份函数定义。

总之,不管是哪一种方法,函数的定义都包含函数名、参数列表和函数体三部分,通过定义函数来实现特定的功能。在编写函数时,需要考虑函数的输入、输出以及具体实现逻辑,保证程序的正确性和效率。

二、函数的调用

可以分为以下两种方式:

普通函数调用

普通函数调用是指通过函数名加括号的方式来调用函数,例如:

int a = 10, b = 5;
int result = add(a, b); // 调用 add 函数计算 a + b 的值,并将结果赋值给变量 result

在这个例子中,我们使用 add(a, b) 的方式来调用 add 函数,并将计算结果赋值给变量 result。

通过函数指针调用函数(法1)

另一种方式是通过函数指针来调用函数。函数指针是一个指向函数的指针变量,可以存储函数的入口地址。

例如,假设有以下函数:

int add(int a, int b) {
return a + b;
}

我们可以定义一个函数指针变量 pfunc,并将其赋值为 add 函数的入口地址:

//int (*pfunc)(int, int);  // 定义函数指针变量
//int* pfunc(int, int) //我的理解定义一个函数指针
pfunc = add; // 将函数指针赋值为 add 函数的入口地址

然后,我们可以通过 (*pfunc)(a, b) 的方式来调用 add 函数,例如:

int a = 10, b = 5;
//我的理解的通过*pfunc解引用
int result = (*pfunc)(a, b); // 通过函数指针调用 add 函数计算 a + b 的值,并将结果赋值给变量 result

在这个例子中,我们首先定义了一个函数指针变量 pfunc,然后将其赋值为 add 函数的入口地址。接着,我们使用 (*pfunc)(a, b) 的方式来调用 add 函数,并将计算结果赋值给变量 result。

通过函数指针调用函数(法2)

通过函数指针调用函数的另一种写法是使用 typedef 关键字来定义函数指针类型。具体步骤如下:

使用 typedef 定义函数指针类型。

typedef int (*pfunc)(int, int);

上述语句定义了一个名为 pfunc 的函数指针类型,它表示一个接收两个 int 类型参数并返回 int 类型值的函数。

声明函数指针变量并赋值。

pfunc ptr = add;

这行代码声明了一个名为 ptr 的函数指针变量,并将其赋值为 add 函数的地址。

通过函数指针调用函数。

int result = ptr(a, b);

这行代码通过函数指针 ptr 调用 add 函数,并将计算结果赋值给 result 变量。

完整的代码示例如下:

#include <iostream>
using namespace std; int add(int a, int b) {
return a + b;
} typedef int (*pfunc)(int, int); int main() {
int a = 10, b = 5;
pfunc ptr = add;
int result = ptr(a, b);
cout << result << endl; // 输出 15
return 0;
}

通过使用 typedef 关键字可以定义函数指针类型,从而使得函数指针的声明和使用更加方便。

总之,不管是哪一种方式,都可以实现对函数的调用。但是需要注意的是,当函数的参数列表较长时,使用函数指针来调用函数可能会比较繁琐,此时应该使用普通函数调用来简化代码。

day3 函数的定义和调用,练习编写简单的程序(记录1)的更多相关文章

  1. Python函数的定义与调用、返回值、参数

    一.函数是什么 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.比如print(),len()等.但你也可以自己创建函数,这被叫做用户自 ...

  2. Kotlin基础(二)函数的定义与调用

    函数的定义与调用 一.预备知识:在Kotlin中创建集合 fun main(args: Array<String>) { //Kotlin中定义各自集合 val ,,,) val list ...

  3. 12_传智播客iOS视频教程_注释和函数的定义和调用

    OC的注释和C语言的注释一模一样.它也分单行注释和多行注释. OC程序里面当然可以定义一个函数.并且定义的方式方法和调用的方式方法和我们C语言是一模一样的.OC有什么好学的?一样还学个什么呢? 重点是 ...

  4. python中函数的定义及调用

    python中函数的定义及使用方法 1.函数的概念:函数是将具有独立功能的代码块组织为一个整体,使其具有特殊功能的代码集; 2.函数的作用:使用函数可以加强代码的复用性,提高程序编写的效率; 3.函数 ...

  5. C#基础知识-函数的定义和调用(五)

    函数也可以称为方法,可以很方便的把一些行为封装到函数里面,当调用这一函数时会把函数块里面的代码按照顺序执行,方法可以有多种形式,有无参数,有无返回值等. 1. 函数的定义   函数定义的基本格式: s ...

  6. JavaScript学习笔记(七)——函数的定义与调用

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...

  7. Python基础--函数的定义和调用

    一.函数的作用: 提高代码的可读性,减少代码的冗余,方便调用和修改,组织结构清晰 二.函数的定义:函数遵循先定义后调用的原则 1.无参函数 def funcname(): #def 是关键字,后跟函数 ...

  8. python基础----函数的定义和调用、return语句、变量作用域、传参、函数嵌套、函数对象、闭包、递归函数

    1.函数的定义: 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...

  9. python中函数的定义与调用

    1.为什么要用函数? (1)代码重复太多(2)可读性差 使用函数的好处: (1)代码重用 (2)保持一致性,易维护 (2)可扩展性 2.初始函数定义与调用     函数的定义 def test(x): ...

  10. Swift 函数的定义与调用(Defining and Calling Functions)

    当你定义一个函数时,你能够定义一个或多个有名字和类型的值.作为函数的输入(称为參数.parameters).也能够定义某种类型的值作为函数运行结束的输出(称为返回类型). 每一个函数有个函数名,用来描 ...

随机推荐

  1. Treewidget节点的删除

    父节点的删除 // 第一种 // 树状列表父节点的删除 // 有点莽 不支持这种操作 delete ui->treeWidget->topLevelItem(0); //  第二种 QTr ...

  2. Promise顺序执行请求;Promise一个请求执行完成再执行另一个请求

    1 函数名() { 2 new Promise(resolve => { 3 this.$rest.请求名1().then(res =>{ 4 // 请求成功后改变状态 5 resolve ...

  3. 通过Windows定时任务执行Python脚本给钉钉群发送消息

    前提:已经存在有成功发送钉钉群机器人消息的python脚本,参考上一篇Python调用钉钉群机器人发送群消息 Windows定时任务设置 1.本机是Win7系统:控制面板->系统和安全-> ...

  4. EXCEL之VLOOKUP函数——查找、分组、排序

    1,VLOOKUP查找 新建excel,输入测试数据,F列打乱A顺序,查找他们各自对应的学号 选中目标单元格(此处是G2),点击插入函数: 选择VLOOKUP: 我们要查找F列在A列对应的学号,所以G ...

  5. JS笔记(三):函数与对象

    镇楼图 Pixiv:torino 四.Function类型 Rest语法 一些函数如Math.max可以支持任意数量的参数,JS中对于这样的参数可以简单使用...来实现,使用剩余参数,它支持收集剩余的 ...

  6. 文献阅读笔记——Boosting the Performance of CDCL-Based SAT Solvers by Exploiting Backbones and Backdoors

    Boosting the Performance of CDCL-Based SAT Solvers by Exploiting Backbones and Backdoors 布尔结构措施 本研究考 ...

  7. Spring Boot 中的异步调用

    通常我们开发的程序都是同步调用的,即程序按照代码的顺序一行一行的逐步往下执行,每一行代码都必须等待上一行代码执行完毕才能开始执行.而异步编程则没有这个限制,代码的调用不再是阻塞的.所以在一些情景下,通 ...

  8. Qt之新建界面动态库并使用

    动态库的创建 动态库的使用 动态库的创建 //SharedLib_global.h #ifndef SHAREDLIB_GLOBAL_H #define SHAREDLIB_GLOBAL_H #inc ...

  9. mysql创建数据库,用户,授权基操

    # 创建数据库create database test; # 创建用户并设置密码 create user 'test'@'%' identified by '123456';# 设置密码SET PAS ...

  10. MariaDB简介

    一.什么是数据库 DB 与 DBMS :DB(DataBase)即数据库,存储已经组织好的数据的容器.DBMS(DataBase Manage System)是数据库管理系统用来对数据库及数据库中的数 ...