C语言——函数(下)访问、声明、定义

简介: C语言——函数(下)访问、声明、定义

前言

前面我们已经介绍了函数的分类、参数、调用,那么这次我们紧接着上节课的内容再了解一下函数的、访问、声明和定义。

1.函数的嵌套调用和来链式访问

函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的。

1.1嵌套调用

当我们要打印一个”hehe“的时候可以这样写

#include<stdio.h>
void new_line()
{
  printf("hehe\n");
}
int main()
{
  new_line();
  return 0;
}

那如果我们要打印三个”hehe“呢,该如何实现,下面我们来试着写写看>

void new_line()
{
  printf("hehe\n");
}
void three_line()
{
  int i = 0;
  for (i = 0; i < 3; i++)
  {
    new_line();
  }
}
int main()
{
  three_line();
  return 0;
}


82e24d4429b947b7893fe380a7cf873b.png


three_line函数中调用了new_line,main函数中又调用了three_line函数,由此可以看出来函数是可以嵌套调用的但是不可以嵌套定义!

1.2链式访问

把一个函数的返回值作为另外一个函数的参数。

我们来举个例子演示一下>

int main()
{
  printf("%d\n", strlen("abcdef"));
  //将strlen的结果以整型形式打印
  return 0;
}


strlen函数的返回值传给printf函数进行打印,这就是函数的链式访问。

再来看这个代码>

int main()
{
  printf("%d", printf("%d", printf("%d", 43)));
  //p1            p2            p3
  return 0;
}在这里插入代码片


这个代码又会输出什么呢?

我们来分析一下:

首先是p1,p1想要打印就要调用p2,p2打印的话就要调用p3,p3的打印结果很好看出来是43,p2打印的结果是什么呢?我们先分析p2打印的是p3函数的返回值,这样子有思路了,我们只需要知道printf函数的返回值就能知道p2打印的结果了,想知道printf的返回值是什么,我们就要用到上节课所提到的工具MSDN(上节课中有下载地址哦)。

我们在MSDN中搜索printf函数>


image.png

printf的返回值是int,下面返回值介绍


这些函数返回的是打印字符的个数,如果发生错误则返回负值。


了解了这些,我们就可以知道p2函数打印的内容是p3函数打印的字符数,p1函数打印的则是p2函数打印的字符个数,由此可以得出上面代码打印的结果是4321。

程序走起来我们来看一下结果>


6c1192b130304952b2e1ff0bf06fce32.png


6.函数的声明和定义

6.1函数声明:

  1. 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是不是存在,函数
    声明决定不了。
  2. 函数的声明一般出现在函数的使用之前。要满足先声明后使用。
  3. 函数的声明一般要放在头文件中的。


当我们写出这样的代码的时候

int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  //求和
  int ret = Add(a, b);
  printf("%d\n", ret);
  return 0;
}
int Add(int x, int y)
{
  return x + y;
}


我们编译一下会发现,有警告⚠

886a7059ada74745884f94663c195163.png


”Add“函数未定义,这是为什么呢?

举个例子:我们平时看书的时候都是一行一行看从上往下看,那么计算机扫描代码也是相同的道理,当扫描到int ret = Add(a, b);,就会报警告说明Add函数未定义,扫描到int Add(int x, int y)时才发现Add函数,但是警告⚠已经报了。

那我们该怎么消除警告呢?

接下来就要用到我们的函数声明了,在main函数前面加上一个int Add(int x, int y);,则表示函数的声明,这是后来编译代码,就不会报出警告了。就相当于告诉计算机,我们有int Add(int x, int y)这么一个函数,再扫描到的时候就不会报出警报了。


2.2函数的定义:

函数的定义是指函数的具体实现,交待函数的功能实现。

Add.h的内容

放置函数的声明

#ifndef __TEST_H__
#define __TEST_H__
#include<stido.h>
//函数的声明
int Add(int x, int y);
#endif //__TEST_H__

test.c的内容

放置函数的实现

#include"Add.h"
int main()
{
  int a = 0;
  int b = 0;
  scanf("%d %d", &a, &b);
  //求和
  int ret = Add(a, b);
  printf("%d\n", ret);
  return 0;
}

772d0898d28b42d99f27460dabae46d7.png


这样写的话就要在test.c文件中包含头文件#include"Add.h"。


总结

以上就是函数访问、声明、定义的全部内容!有付出才会有收获,”种一棵树的最好时间是十年前,其次是现在。“创作不易,辛苦各位小伙伴们动动小手,三连一波~~~,本文中也有不足之处,欢迎各位随时私信点评指正!

相关文章
|
2天前
|
存储 算法 C语言
数据结构基础详解(C语言):单链表_定义_初始化_插入_删除_查找_建立操作_纯c语言代码注释讲解
本文详细介绍了单链表的理论知识,涵盖单链表的定义、优点与缺点,并通过示例代码讲解了单链表的初始化、插入、删除、查找等核心操作。文中还具体分析了按位序插入、指定节点前后插入、按位序删除及按值查找等算法实现,并提供了尾插法和头插法建立单链表的方法,帮助读者深入理解单链表的基本原理与应用技巧。
|
2天前
|
存储 C语言
C语言程序设计核心详解 第十章:位运算和c语言文件操作详解_文件操作函数
本文详细介绍了C语言中的位运算和文件操作。位运算包括按位与、或、异或、取反、左移和右移等六种运算符及其复合赋值运算符,每种运算符的功能和应用场景都有具体说明。文件操作部分则涵盖了文件的概念、分类、文件类型指针、文件的打开与关闭、读写操作及当前读写位置的调整等内容,提供了丰富的示例帮助理解。通过对本文的学习,读者可以全面掌握C语言中的位运算和文件处理技术。
|
2天前
|
存储 C语言
C语言程序设计核心详解 第七章 函数和预编译命令
本章介绍C语言中的函数定义与使用,以及预编译命令。主要内容包括函数的定义格式、调用方式和示例分析。C程序结构分为`main()`单框架或多子函数框架。函数不能嵌套定义但可互相调用。变量具有类型、作用范围和存储类别三种属性,其中作用范围分为局部和全局。预编译命令包括文件包含和宏定义,宏定义分为无参和带参两种形式。此外,还介绍了变量的存储类别及其特点。通过实例详细解析了函数调用过程及宏定义的应用。
|
8天前
|
Linux C语言
C语言 多进程编程(三)信号处理方式和自定义处理函数
本文详细介绍了Linux系统中进程间通信的关键机制——信号。首先解释了信号作为一种异步通知机制的特点及其主要来源,接着列举了常见的信号类型及其定义。文章进一步探讨了信号的处理流程和Linux中处理信号的方式,包括忽略信号、捕捉信号以及执行默认操作。此外,通过具体示例演示了如何创建子进程并通过信号进行控制。最后,讲解了如何通过`signal`函数自定义信号处理函数,并提供了完整的示例代码,展示了父子进程之间通过信号进行通信的过程。
|
8天前
|
C语言
C语言 字符串操作函数
本文档详细介绍了多个常用的字符串操作函数,包括 `strlen`、`strcpy`、`strncpy`、`strcat`、`strncat`、`strcmp`、`strncpy`、`sprintf`、`itoa`、`strchr`、`strspn`、`strcspn`、`strstr` 和 `strtok`。每个函数均提供了语法说明、参数解释、返回值描述及示例代码。此外,还给出了部分函数的自实现版本,帮助读者深入理解其工作原理。通过这些函数,可以轻松地进行字符串长度计算、复制、连接、比较等操作。
|
8天前
|
SQL 关系型数据库 C语言
PostgreSQL SQL扩展 ---- C语言函数(三)
可以用C(或者与C兼容,比如C++)语言编写用户自定义函数(User-defined functions)。这些函数被编译到动态可加载目标文件(也称为共享库)中并被守护进程加载到服务中。“C语言函数”与“内部函数”的区别就在于动态加载这个特性,二者的实际编码约定本质上是相同的(因此,标准的内部函数库为用户自定义C语言函数提供了丰富的示例代码)
|
23天前
|
C语言
【C语言】字符串及其函数速览
【C语言】字符串及其函数速览
21 4
|
19天前
|
机器学习/深度学习 编译器 Serverless
C语言中函数
C语言中函数
17 0
|
19天前
|
存储 Serverless C语言
C语言中的标准库函数
C语言中的标准库函数
17 0
|
23天前
|
C语言
【C语言】epoll函数
【C语言】epoll函数
16 0