IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言之函数 -> 正文阅读

[C++知识库]C语言之函数

一. 函数的分类

1. 库函数

C语言常用的库函数都有:

IO函数

字符串操作函数

字符操作函数

内存操作函数

时间/日期函数

数学函数

其他库函数

注: 1. 但是库函数必须知道的一个秘密就是:使用库函数,必须包含 #include 对应的头文件。

? ? ? ? 2. 参考文档使用库函数。

#include <stdio.h>
int main()
{
    char arr[] = "abc";
    //size_t -> unsigned int
    size_t len = strlen(arr);
    //%d - 有符号
    //%u - 无符号
    return 0;
}

2. 自定义函数

自定义函数和库函数一样,有函数名,返回值类型和函数参数。

ret_type fun_name(para1, * )
{
 statement;//语句项
}
ret_type 返回类型,不需要返回时,为void
fun_name 函数名
para1    函数参数

例:写一个函数可以交换两个整形变量的内容。

#include <stdio.h>
//错误版本
//实现成函数,但是不能完成任务,输出的值还是没有被交换,改变的只是形参
void Swap1(int x, int y)
{
 int tmp = 0;
 tmp = x;
 x = y;
 y = tmp;
}



//正确的版本
void Swap2(int *px, int *py)
{
 int tmp = 0;
 tmp = *px;
 *px = *py;
 *py = tmp;
}

int main()
{
 int num1 = 1;
 int num2 = 2;
 Swap1(num1, num2);
 printf("Swap1::num1 = %d num2 = %d\n", num1, num2);
 Swap2(&num1, &num2);//传址调用
 printf("Swap2::num1 = %d num2 = %d\n", num1, num2);
 return 0;
}

以上代码错误的版本之所以错是因为:当函数调用时,实参传给形参,形参其实是实参的一份临时拷贝,所以对形参的修改不会影响实参。

二. 函数的参数

1.??实际参数(实参): 真实传给函数的参数,叫实参。

实参可以是:常量、变量、表达式、函数等。

无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形 参。

2. 形式参数(形参): 形式参数是指函数名后括号中的变量,因为形式参数只有在函数被调用的过程中才实例化(分配内存单 元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。

上面 Swap1 和 Swap2 函数中的参数 x,y,px,py 都是形式参数。在main函数中传给 Swap1 的 num1 , num2 和传 给 Swap2 函数的 &num1 , &num2 是实际参数。

四. 函数调用

1.? 传值调用函数的形参和实参分别占有不同内存块对形参的修改不会影响实参

2.? 传址调用传址调用是把函数外部创建变量的内存地址传递给函数参数的一种调用函数的方式。? ? ? ?这种传参方式可以让函数和函数外边的变量建立起真正的联系,也就是函数内部可以直接操作? ? ? ?函数外部的变量。

【注:关于return

1. 当函数有返回类型时,内部出现return且运行到return时,终止该函数的运行,如果return后有返回值,直接将值返回给引用该函数的函数,否则只终止该函数运行,不返回任何值。

2. 当函数无返回类型即void时,内部出现return且运行到return时,终止该函数的运行,不返回任何值也不能返回任何值】

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

1. 嵌套调用

#include <stdio.h>
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;
}

注:函数可以嵌套调用,但是不能嵌套定义。

//以下代码为错误示范
//嵌套定义
void test1()
{
    void test()
    {
        
    }
}

2. 链式访问

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

#include <stdio.h>
#include <string.h>
int main()
{
    //int len = strlen("abc");
    //printf("%d\n", len);
    printf("%d\n", strlen("abc"));//打印的都为3,但该行代码是将strlen的返回值作为printf
函数的第二个参数,这就是链式访问
    return 0;
}



//例:
int main()
{
    printf("%d",printf("%d", printf("%d",43)));
//输出结果为4321
//printf函数返回的字符的个数,遇到错误时返回负值
//先打印43,然后返回的字符数为2打印2,返回的字符数为1,打印1
    return 0;
}

六. 函数的声明和定义?

函数声明: 1. 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。

???????????????????????但是具体是不是存在,函数声明决定不了。

????????????????????2. 函数的声明一般出现在函数的使用之前。

????????????????????????要满足先声明后使用

????????????????????3. 函数的声明一般要放在头文件中的

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

【注:

test.h的内容

放置函数的声明

#ifndef __TEST_H__
#define __TEST_H__
//函数的声明
int Add(int x, int y);
#endif //__TEST_H__

test.c的内容

放置函数的实现即函数的定义

#include "test.h"
//函数Add的实现
int Add(int x, int y)
{
 return x+y;
}

(将函数剥离主函数以及再将函数的定义与声明剥离,将函数定义置于非主函数源文件中,将函数的声明置于头文件中)】

【静态库:可将源文件转换为静态库的形式,使用静态库时,参照如下代码】

//以add函数为例
#include "add.h"
//声明该函数
#pragma comment(lib, "add.lib")
//导入静态库
//静态库扩展名为.lib

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-26 08:41:11  更:2021-11-26 08:43:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:33:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码