C语言小知识点-自定义函数、进程映像、全局变量和局部变量

自定义函数
函数声明:
返回值类型 函数名(形参类型1 形参名1,形参类型2 形参名2);

函数定义:
返回值类型 函数名(形参类型1 形参名1,形参类型2 形参名2)
{
//函数体
}

函数调用:
函数名(实际参数1,实参2);

函数声明:告诉调用者该函数的调用格式
C中函数名建议小写,可用下划线分割
函数不需要参数时建议写void,没有写void时若在调用时写了参数不会报错,编译也能通过,编译器会自动丢弃,写了void调用时写参数编译会报错
不需要返回值时,返回值类型写void,若没有写编译器会产生警告但没有报错,且编译器自动给函数猜/补返回值类型(int/void)

函数定义:函数的具体实现
函数调用:
返回值会放在调用函数语句这里,应用变量接收或者直接显示,否则再也拿不到,

函数的隐式声明:在函数调用之前没有任何该函数的声明/定义,编译器会猜测函数的类型为int,猜对了产生隐式声明的警告,猜错了会报错,在调用前只有定义会产生警告但是还是能运行,如果在调用之前有定义,则声明可省略

printf的返回值是正确输出的字符的个数

函数传参:
1.函数中定义的变量属于该函数,不能被其他函数直接使用
2.实参与形参之间以赋值方式传递数据,且是单向值传递的
3.return把返回值数据放在了公共区域内存中,(调用者和被调用者都可以访问),调用者从该区域获取数据,若没有写return语句,该区域会是一个随机的垃圾数据,调用者也能拿到返回值但是无意义
4.数组作为函数的参数传递时,数组的长度会丢失,需要额外增加一个变量把数组的长度传递过去
void func(int arr[],int len);//此时数组名本质上是一个指针,指向一个地址
5、数组作为参数传递时,是"址传递",相当于调用者与函数共享数组

进程映像:
程序:存储在磁盘上的可执行文件(二进制文件、脚本文件)
进程:正在系统中运行的程序
进程映像:进程的内存分布情况
text 代码段:(代码段+只读段)
存储的是二进制指令、常量,权限是只读,如果强制修改会产生段错误
data 数据段:
初始化的全局变量、初始化过的静态局部变量
bss 静态数据段:
未初始化的全局变量、初始化为0的全局变量、未初始化的静态局部变量
在该段内存中的数据在程序开始前会自动清理为0
stack 栈:
局部变量和块变量,会随着程序的运行不断地申请、释放,由操作系统管理,使用方便,内存小
heap 堆:
该段内存由程序员手动管理,申请使用过后必须手动释放,使用麻烦,足够大

局部变量和全局变量:
全局变量:定义在函数外的变量,一般首字母大写
存储位置:data(初始化后) 或者 bss(未初始化)
生命周期:程序开始到程序结束
使用范围:程序的任意位置都可以使用
局部变量:定义在函数内的变量
存储位置:stack 栈内存
生命周期:从函数开始到函数结束
使用范围:只能在该函数内使用
块变量:定义在if/for/while等语句块内的变量
存储位置:stack 栈内存
生命周期:从语句块开始到语句块结束
使用范围:只能在语句内使用

注意:同名的局部变量会屏蔽同名的全局变量
同名的块变量会屏蔽同名的全局、局部变量
因此建议全局变量首字母大写,局部变量全部小写

posted @   冲他丫的  阅读(167)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示