首页 > 其他分享 >C语言【函数、作用域、常用系统函数】

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

时间:2023-11-21 21:04:15浏览次数:31  
标签:返回 函数 作用域 C语言 int 声明 变量

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

一、函数

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

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

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

2、函数的传值和传址。 todo
3、函数的名称即代表函数的地址。
4、C语言不支持函数的嵌套声明和定义。
5、形参和实参的区分:调用其他函数时,传递的参数叫实参。形参和实参数量要一致。
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或"",保留之前的值直到修改或者程序执行结束。虽然它和普通局部作用域不在同一区域,但同一局部作用域内仍不能存在同名的静态和普通局部变。

5、块作用域。 C99标准。

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

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

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

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

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

递归。找好递推公式和递归结束条件。递推公式要求:f(n)内每个包含变量的小公式都可以用f(n)中n的变化来表示。

三、常用系统函数

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
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语言,int,声明,变量
From: https://www.cnblogs.com/wangsiyaoa/p/17847564.html

相关文章

  • Python+C语言·········基础知识点
    一:常数、变量和数据类型1。常数和变量的差异一个程序通常都会有被处理的对象,而这些对象在被处理之前要以一些特定的类型存放在内存的某一个位置,需要的时候再拿出来处理。程序设计语言会把放置数据的那些内存位置都给一个名字,并把这个概念以“变量”来命名。放在这些位置的里面的数......
  • Python——第三章:函数的返回值
    函数的返回值:函数执行之后.会给调用方一个结果.这个结果就是返回值关于return:    函数只要执行到了return.函数就会立即停止并返回内容.函数内的return的后续的代码不会执行    1.如果函数内没有return,此时外界收到的是None    2.如果写了re......
  • C语言
     编译命令:gcctest.c生成a.exe可执行文件gcctest.c-o xxx生成xxx.exe可执行文件带参主函数格式:intmain(intargc,char*argv[])argc:输入的字符个数argv[]:字符 ......
  • 回调函数用于通知机制
    相机SDK中一般有这样的回调:当帧采集完毕,自动调用回调函数。回调函数用于通知机制:当某一事件发生时,如果使用者注册过了回调函数,则会自动执行回调函数中的内容。网上很多回调函数的内容都是简单的使用下,没有太多关于通知机制的内容,于是找了一个案例//sdk.htypedefvoid(*REC_CA......
  • 自实现模态对话框-DoModal函数
    参考CDialog::DoModal函数的实现方式,自己实现了模态框相关功能。ModalBase.h头文件1#include<afxwin.h>23#defineID_NULL04#defineID_OK15#defineID_CANCEL26#defineID_ABORT3......
  • 计算机科学与技术之网络编程 Windows下VC6.0 网络SOCKET编程C语言实现(服务端)
    在VC6.0平台用C语言实现网络SOCKET通信一.在VC6.0平台创建Win32ConsoleApplication工程工程名称自拟(或输入firstSocket)添加新建项文件C++SourceFile 文件名自拟,后缀.c(如firstSocket.c)在firstSocket.c加入头文件#include<winsock2.h>链接动态库#pragmacomment(l......
  • 09-基础SQL-DQL(数据查询语言)-聚合函数(count、max、min、avg、sum)
    DQL-介绍(常用)DQL英文全称是DataQueryLanguage(数据查询语言),数据查询语言用来查询数据库中表的记录查询关键字:SELECTDQL-语法......
  • Class成员函数的声明方式
    1#include<iostream>usingnamespacestd;classComplex{ doublereal,imag; public: Complex(doubler=0,doublei=0):real(r),imag(i){}; operatordouble()const;//强制类型转换};Complex::operatordouble()const{returnreal;}intmai......
  • Python 中函数 range
    range函数简要说明接收参数为1/2/3,表示的是左闭右开接收参数当使用Python中的range()函数时,可以总结如下使用方法:range(stop):生成从0到stop-1的整数序列。产生的序列包含起始值0,但不包含stop。foriinrange(5):print(i)输出:01234range(start,stop):生成......
  • C语言:用for循环语句编写金字塔
       今天我将继续为大家分享C语言的知识,今天要分享的内容依旧是C语言中的for循环语句中的经典例题。好了,废话少说,让我们进入今天的学习内容吧!#include<stdio.h>intmain(){inti,j,c;for(i=1;i<=10;i++)//十行的金字塔{for(j=1;j<=15-i;j++)//*前面有15-i个......