【C语言天天练(三)】函数

2024-04-20 12:38
文章标签 语言 函数 天天

本文主要是介绍【C语言天天练(三)】函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言:


        对于任何程序来讲,函数的地位是不言而喻的。下面先给出函数的定义,然后根据定义分析C语言中的函数。


函数定义:


类型 

函数名(形式参数)

       代码块


函数分析:


        由定义可以看出函数主要包括四部分:函数类型、函数名、函数形参、函数代码块。

        

       函数类型:指明了函数返回值的类型,是整数、浮点数、指针甚至是结构体等等。需要注意的两点:1、如果类型是void,则没有返回值。如果是void *型的返回值,那可以返回任意类型的指针,这是ANSI C标准定义的,void *可以是任意类型的指针。2、返回值的类型应该与函数定义的类型相同,否则编译器会对它进行强制类型转换。


        函数名就是指函数的名称,注意一点就是函数名可以作为函数的参数进行传递,此时函数名是函数的起始地址。这一点在回调函数用有应用。

test.c示例源码:

#include <stdio.h>void 
fun(void)
{}void main(void)
{printf("fun addr = %p\n", fun);return;
}
编译:gcc test.c 

执行:./a.out

结果:fun addr = 0x80483e4


        代码块:包含了局部变量的声明和函数调用时需要执行的语句。


        函数形参:C语言中函数的所有参数均以“传值调用”方式进行传递,这就是说函数将获得参数值的一份拷贝。传递数组时其实是传递的数组的地址值,类似的有指针、函数名等。对于形参,记住两个规则:

1、传递给函数的标准参数是传值调用的。

2、传递给函数的数组参数在行为上就像它们时通过传址调用的那样。


函数使用:


        函数定义完成后要想使用,一般会进行函数声明。函数声明就是告诉编译器函数的特定信息(类型、参数等)。有两种方式告诉编译器函数的信息:

        一 如果同一源文件的前面已经出现了该函数的定义,编译器就会记住它的参数数量和类型,以及函数的返回值类型。

        二 使用函数原型向编译器提供函数信息。

        

使用技巧:


       函数原型必须与函数定义匹配,把函数原型包含在定义函数的文件中可以使编译器确认它们之间的匹配。


示例解析:

/*File name : main.c*/#include <stdio.h>
#include "fun.h"void
main(int argc, char **argv)
{int a = 1, b = 2;printf("a + b = %d\n", fun(a, b));return;
}
/*File name : fun.h*/
extern int fun(int, int);
/*File name : fun.c*/#include "fun.h"
int 
fun(int num1, int num2)
{return num1 + num2;
}
编译:gcc main.c fun.c

执行:./a.out

结果:a + b = 3


这篇关于【C语言天天练(三)】函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/920278

相关文章

C语言中联合体union的使用

本文编辑整理自: http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=179471 一、前言 “联合体”(union)与“结构体”(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间, 一个联合变量

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

【操作系统】信号Signal超详解|捕捉函数

🔥博客主页: 我要成为C++领域大神🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞👍收藏⭐评论✍️ 本博客致力于知识分享,与更多的人进行学习交流 ​ 如何触发信号 信号是Linux下的经典技术,一般操作系统利用信号杀死违规进程,典型进程干预手段,信号除了杀死进程外也可以挂起进程 kill -l 查看系统支持的信号

java中查看函数运行时间和cpu运行时间

android开发调查性能问题中有一个现象,函数的运行时间远低于cpu执行时间,因为函数运行期间线程可能包含等待操作。native层可以查看实际的cpu执行时间和函数执行时间。在java中如何实现? 借助AI得到了答案 import java.lang.management.ManagementFactory;import java.lang.management.Threa

人工和AI大语言模型成本对比 ai语音模型

这里既有AI,又有生活大道理,无数渺小的思考填满了一生。 上一专题搭建了一套GMM-HMM系统,来识别连续0123456789的英文语音。 但若不是仅针对数字,而是所有普通词汇,可能达到十几万个词,解码过程将非常复杂,识别结果组合太多,识别结果不会理想。因此只有声学模型是完全不够的,需要引入语言模型来约束识别结果。让“今天天气很好”的概率高于“今天天汽很好”的概率,得到声学模型概率高,又符合表达

SQL Server中,isnull()函数以及null的用法

SQL Serve中的isnull()函数:          isnull(value1,value2)         1、value1与value2的数据类型必须一致。         2、如果value1的值不为null,结果返回value1。         3、如果value1为null,结果返回vaule2的值。vaule2是你设定的值。        如

C语言 将“China”译成密码

将“China”译成密码,密码规律是:用原来的字母后面的第4个字母代替原来的字母。例如,字母“A”后面的第4个字母是“E”,用“E”代替“A”。因此,“China”应译为“Glmre”。编译程序用付赋初值的方法使c1,c2,c3,c4,c5这五个变量的值分别为“C”,“h”,“i”,“n”,“a”,经过运算,使c1,c2,c3,c4,c5分别变成“G”,“l”,“m”,“r”,“e”。分别用put

tf.split()函数解析

API原型(TensorFlow 1.8.0): tf.split(     value,     num_or_size_splits,     axis=0,     num=None,     name='split' ) 这个函数是用来切割张量的。输入切割的张量和参数,返回切割的结果。  value传入的就是需要切割的张量。  这个函数有两种切割的方式: 以三个维度的张量为例,比如说一

C语言入门系列:探秘二级指针与多级指针的奇妙世界

文章目录 一,指针的回忆杀1,指针的概念2,指针的声明和赋值3,指针的使用3.1 直接给指针变量赋值3.2 通过*运算符读写指针指向的内存3.2.1 读3.2.2 写 二,二级指针详解1,定义2,示例说明3,二级指针与一级指针、普通变量的关系3.1,与一级指针的关系3.2,与普通变量的关系,示例说明 4,二级指针的常见用途5,二级指针扩展到多级指针 小结 C语言的学习之旅中,二级

【LinuxC语言】select轮询

文章目录 前言select函数详解selectfd_set类型一个小问题select函数使用步骤改进服务器代码select服务器示例代码 总结 前言 在Linux C语言编程中,我们经常需要处理多个I/O操作。然而,如果我们为每个I/O操作创建一个线程,那么当I/O操作数量增加时,线程管理将变得复杂且效率低下。这就是我们需要select轮询的地方。select是一种高效的I/