C语言【函数、作用域、常用系统函数】

这篇具有很好参考价值的文章主要介绍了C语言【函数、作用域、常用系统函数】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

C语言【函数、作用域、常用系统函数】

一、函数

1、函数的声明
// 函数声明格式
int add(int x, int y);
// 或
int add(int, int);

​ 自定义函数如果放在main函数之后,需要声明函数才可以访问到。如果未声明,则编译器会自动补一个返回类型未int类型的声明,这样以来,如果自定义函数返回值不为int,会报错。

​ 结论:记得加函数声明。

2、函数的传值和传址。 todo
3、函数的名称即代表函数的地址。
4、C语言不支持函数的嵌套声明和定义。
5、形参和实参的区分:调用其他函数时,传递的参数叫实参。形参不能是一个字面常量,只能是局部变量。C语言中,型参与实参哪个也不能多,也不能少,且类型也要一一对应上。C语言不支持重载。
6、函数中声明了返回值类型,但没写return:如果函数只有一个参数,且实参传的变量,gcc返回为此参数值(试了三次,变量为整型),其他情况返回的值挺随机的。
7、gcc允许其他函数调用main函数,警告但不报错。
8、程序启动时,操作系统开启main函数线程;main函数执行完毕后,将返回值(代表正确与否的状态)返回给操作系统;main函数的参数由操纵系统提供,一般为:int argc 表示main函数的参数个数,char const * argv[]表示具体的参数,可以通过gcc编译时指定这些参数。

1、如果使用vscode进行多文件编译,需要修改配置;使用gcc命令进行多文件编译时,只需加上要编译的文件即可。

2、分文件编译时,想要调用其他文件的函数,需要声明该函数,尽量别让编译器隐式声明那个只有int类型的。

3、分文件编译时,想使用其他文件的全局变量,需要用extern声明后使用,不加extern视为重新定义了一个,这种情况这个重新定义的不报错,只不过不建议——想使用其他文件的就extern,不想使用就别用这个名,尽量不要模棱两可。

二、作用域

1、作用域分为全局作用域、局部作用域、块作用域。
2、同一作用域内不能有同名标识符。可以在小作用域定义与大作用域同名的标识符。作用域大的标识符管的范围大,作用域小的标识符优先级高。
3、全局作用域。

​ 定义在所有函数和代码块之外,值存储在全局静态区,初始值默认为0或"",声明周期贯穿整个程序。

static:静态全局变量或函数等在其他文件内不可见,使用extern声明也不行,这就是静态全局变量的作用。

4、局部作用域。

​ 定义在函数内(参数也算函数内),值存储在栈空间,初始值为随机值(例外的情况往下看)。

static:局部变量如果加了static,表示为静态局部变量。 静态局部变量存储在全局静态区,和全局变量在一个区域,它默认值0或"",保留之前的值直到修改或者程序执行结束(static赋初值那个代码只第一次调用它的函数时执行,之后不再执行。)。虽然它和普通局部作用域不在同一区域,但同一局部作用域内仍不能存在同名的静态和普通局部变。

5、块作用域。 C99标准。

​ 一个代码块内,比如 if 或 for 或 就一个{}

6、如果小作用域有和大作用域同名的变量,如何使用大作用域的变量?

​ 块作用域与局部作用域有同名的,似乎没法使用局部的。

​ 局部与全局有同名的变量时,可以定义一个代码块,在代码块中使用extern声明全局变量并使用,这个变量就是那个全局的变量。如果不在代码块中声明会报错。

​ 如果全局变量中没有你在局部变量用extern声明的变量,则局部变量中用extern声明的这个变量只能声明不能赋初值或使用。

递归。找好递推公式和递归结束条件。递推公式要求:f(n)内每个包含变量的小公式都可以用f(n)中n的变化来表示。文章来源地址https://www.toymoban.com/news/detail-746691.html

三、常用系统函数

1、 <string.h> 库中的常用函数。
strlen(str);	//返回str长度,类型为size_t。  重点:好处为自动减掉了'\0'那个长度。
strcpy(str1, str2);		// 将str2的值复制给str1。 重点:对于数组,str2>str1时会溢出,给警告,不报错。
strcat(str1, str2); 	// 将str2的值拼接到str1之后。重点:str1长度小于拼接后的值时,会溢出,给警告,不报错。
2、<stdio.h> 库中常用函数。
// sprintf(...)
char arr[100] = {'a'};
int a=1, b=2, c=3;
sprintf(arr, "第%d,第%d,第%d", a, b, c);	// 用来按格式组合字符串的
printf("%s\n", arr);	// 第1,第2,第3
// sscanf(...)
char s[] = "树上有44颗红柿子,树下有66座石狮子。";
int x, y;
sscanf(s, "树上有%d颗红柿子,树下有%d座石狮子。", &x, &y);	// 拆数的。想一想拆字符串怎么整
printf("%d %d\n", x, y);	// 44 66
sscanf函数中通过%s取一定字符串到数组,需要指定取几个字节的字符,否则%s后的整个字符串都会放到数组中。格式:%ns,n为字节数。UTF8中一个汉字占3-4个字节,一般3个字节。utf8是unicode的一种实现。
3、<time.h> 库中常用函数。
time(&变量名);	// 将时间戳(1970年1月1日到现在的秒数)赋给这个变量,该变量需要时 time_t 类型
time(NULL);	//返回时间戳,这个是返回,上面的是赋值给参数。
// 以上两种结合起来,既赋值参数又返回。也就是第一种就可以返回时间戳。
ctime(&时间戳变量);	// 返回。返回可视化的字符串。

/*-------以下是一个ctime函数的示例-------*/
time_t ti = time(NULL);
// char st[100] = ctime(&ti);   // 不成立,会报错,返回的指针,不能赋给数组,但可以指针接收或者直接输出。
printf("%s\n", ctime(&ti));		// Tue Nov 21 20:27:40 2023
/*-----------上面示例结束---------*/

difftime(时间戳1, 时间戳2);	// 返回差值,返回类型double。 参数不加&
4、<math.h> 库中常用函数。
// 以下函数都为返回,不改变原参数
sqrt(x);	// 平方根
cbrt(x);	// 立方根
pow(x, y);	// x的y次方
fabs(x); 	// 绝对值
ceil(x);	// 向上取整,比原数大
floor(x);	// 向下取整,比原数小
round(x);	// 四舍五入取整。round(-12.51)返回-13
trunc(x); 	// 截断小数

到了这里,关于C语言【函数、作用域、常用系统函数】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • strstr函数详解 看这一篇就够了-C语言(函数讲解、函数实现、使用用法举例、作用、自己实现函数 )

     strstr()函数用于:查找子字符串 目录 函数介绍 用法示例 函数讲解 实现函数  事例展示 函数声明:char *strstr(const char *str1, const char *str2) 头  文  件:#include string.h 返  回  值: 返回值为char * 类型( 返回指向  str1  中第一次出现的  str2  的指针);如果  str2  不是 

    2024年02月13日
    浏览(45)
  • 【c语言:常用字符串函数与内存函数的使用与实现】

    简介:本篇文章是对C语言中常用的字符串函数和内存函数的学习以及模拟实现 文档内容来自:https://legacy.cplusplus.com/ 字符串以 ‘\\0’ 作为结束标志, strlen函数返回的是在字符串中 ‘\\0’ 前⾯出现的字符个数( 不包含 \\\'\\0\\\' )。 参数指向的字符串必须要以 ‘\\0’ 结束。 注意函

    2024年02月04日
    浏览(43)
  • C语言-程序环境和预处理(2)--带副作用的宏参数,宏与函数的对比,#undef,条件编译,文件包含

    上一篇文章–《C语言-程序环境和预处理(1)》讲述了程序的翻译环境和执行环境,编译、连接,预定义符号,#define,#符号和##符号的相关知识。 链接: 《C语言-程序环境和预处理(1)》 本篇文章,讲述带副作用的宏参数,宏与函数的对比,#undef,条件编译,文件包含的相

    2024年02月08日
    浏览(59)
  • 【进阶C语言】各大常用库函数的模拟实现

    前言 今天恒川带给大家的是平常应用的库函数,恒川来给大家都模拟实现一下,希望对大家有帮助!! 三种方式: 方式1: 方式2: 方式3: 参考代码: 参考代码: 参考代码: 参考代码: 参考代码: 如果这份博客对大家有帮助,希望各位给恒川一个免费的点赞作为鼓励,

    2023年04月09日
    浏览(34)
  • <stdlib.h>头文件: C 语言常用标准库函数详解

    在C语言中, stdlib.h 是一个重要的头文件,它包含了一些标准库函数,提供了内存分配、随机数生成、字符串转换等功能。本博客将深入解析 stdlib.h 头文件,介绍其中一些常用函数的用法和实现原理。 stdlib.h 是 C 标准库的一部分,它定义了一些宽泛的实用函数。这些函数通常

    2024年04月08日
    浏览(34)
  • C语言从入门到实战——常用内存函数的了解和模拟实现

    内存函数(memory functions)指的是控制计算机内存操作的函数 函数 memcpy 从 source 的位置开始向后复制 num 个字节的数据到 destination 指向的内存位置。 这个函数在遇到 \\\'\\0\\\' 的时候并不会停下来。 如果 source 和 destination 有任何的重叠,复制的结果都是未定义的。 对于重叠的内存

    2024年02月03日
    浏览(34)
  • 【C语言进阶】最常用的库函数大全——从入门到精通

    前言: 一.字符串函数 1.strlen——求字符串长度 strlen 2.长度不受限制的字符串函数 a.strcpy——字符串拷贝 strcpy  b.strcat——追加字符串 strcat  c.strcmp——字符串比较 strcmp 3.长度受限制的字符串函数——strncpy,strncat,strncmp 为什么会出现这些函数呢? strncpy函数: strncpy strncat函数

    2024年02月03日
    浏览(57)
  • 详解C语言string.h中常用的14个库函数(四)

    本篇博客会讲解最后4个函数,分别是memset, memcpy, memmove, memcmp。这4个函数开头都是mem,即memory(内存)的缩写。 memset可以用来设置内存中的值。该函数可以把从ptr指向的空间开始,后面的num个字节设置成value的值。 举个简单的例子。假设有一个数组: 我们想把这个数组的前

    2023年04月24日
    浏览(35)
  • C语言标准库(常用函数)详解(含示例)数学公式:math.h

    目录 math.h的介绍 math.h的概述 库中定义的宏: HUGE_VAL 库函数(只讲解常用函数) 三角函数 示例代码 输出 双曲函数 示例代码 输出 指数和对数函数(只含常用函数) 示例代码  输出 常用函数pow,sprt,cbrt,hypot,fabs,abs 代码示例 输出 math.h 一般见于C,C++程序设计, #includema

    2024年02月09日
    浏览(38)
  • Fatfs文件系统常用函数

    本文将介绍Fatfs文件系统的常用函数,学过C语言文件函数的小伙伴们就可以跳过了,因为两者之间基本没有什么区别: 下文提到的大多数函数都会返回FRESULT枚举,可以通过返回值来调试程序,找出程序出错的原因,FRESULT枚举如下: 挂载和取消挂载文件系统 fs: 文件系统句柄

    2024年02月05日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包