C语言干货:函数知识详解(变量的作用域,全局变量,静态变量)
yuyutoo 2025-01-05 00:09 3 浏览 0 评论
这篇介绍C语言里函数的定义、子函数的使用。接着介绍变量的作用域,定义全局变量、静态变量、只读变量、变量初始化等等。
一、函数定义
//定义一个函数
int func(int a,int b)
{
}
<函数的返回值类型> <函数名称>(函数的形参列表,....)
{
函数代码主体部分;
}
<函数的返回值类型>: 返回值类型可以是C语言支持任何类型。基本数据类型、指针、结构体、枚举…
如果函数执行完毕,不需要返回值,可以将函数返回值类型声明为空类型。Void
函数名称 :不能与库函数名称冲突,命名规则与变量命名规则一样。
函数的形参列表 :函数在执行行传入的参数,类型与返回值类型定义方法一样。
如果有多个形参,可以使用逗号隔开
函数的返回值: 如果函数执行完毕之后需要向调用处返回数据,可以使用return,该语句只能返回一个值。
#include <stdio.h>
int func(int,int); //声明func函数
//int func(int a,int b);//声明func函数
int main(void)
{
int a;
a=func(12.34,56.78); //形参传入之后,会转为整型
printf("a=%d\n",a);
return 0;
}
//定义一个函数
int func(int a,int b)
{
int c;
c=a+b;
return c; //给调用者返回结果
}
二、函数练习作业
(1)编写一个判断某一年是否是闰年的函数。(条件: 能整除4且不能整除100 或者能整除400 )
#include <stdio.h>
int func_year(int year); //声明函数
int main(void)
{
int year; //c89标准
int err=0;
printf("输入一个年份:");
scanf("%d",&year);
err=func_year(year);//调用函数
if(err==1)
{
printf("闰年!\n");
}
else if(err==0)
{
printf("平年!\n");
}
else
{
printf("输入的年份错误!\n");
}
return 0;
}
(2)该函数由主函数调用,判断平年和闰年。
/*
函数功能: 判断平年和闰年
返回值 : 0表示平年,1表示闰年,负数表示错误
*/
int func_year(int year)
{
if(year<1900)return -1; //加一个限制条件
if((year%4==0&&year%100!=0)||year%400==0)
{
return 1;
}
return 0;
}
(3)输入一个华氏温度,输出摄氏温度,计算公式为(华氏度-32)×5÷9 要求结果保留两位小数。
#include <stdio.h>
float func_temp(float temp); //声明函数
int main(void)
{
float temp;
printf("输入一个温度值:");
scanf("%f",&temp);
printf("temp=%.2f\n",func_temp(temp));
return 0;
}
/*
函数功能: 计算温度
返回值 : 摄氏度
*/
float func_temp(float temp)
{
//(华氏度-32)×5÷9
return (temp-32)*5/9.0;
}
(4)封装函数,打印以下图案: 回文三角形,形参可以决定行数。
1
121
12321
1234321
(5)计算百分比与数据自动转换
#include <stdio.h>
int main(void)
{
float data;
data=(10/60.0)*100; //运算时,需要一个数据是浮点数,运算中才可以使用浮点方式存储
printf("data=%.0f%%\n",data);
return 0;
}
(6)函数返回值例子: 限定范围
#include <stdio.h>
int func(int a);
int main(void)
{
printf("%d\n",func(200));
return 0;
}
int func(int a)
{
return (a==100); //限定范围值为0和1
}
三、 变量的作用域
3.1 全局变量和局部变量
const int c; //定义只读变量
static int b; //定义静态变量
说明: 变量定义作用域分为全局变量和局部变量。
1.局部变量和全局变量名称可以相同。
2.如果局部变量名称与全局变量名称相同,优先使用局部变量。
#include <stdio.h>
void func(int);
int data=123; //全局变量(公用变量)
int main(void)
{
int data=456; //局部变量
printf("data1=%d\n",data);
func(666);
return 0;
}
void func(int data)
{
printf("data2=%d\n",data);
}
3.2 只读变量
#include <stdio.h>
void func(int);
const int data=888; //只读变量
int main(void)
{
//data=666; 错误的
printf("%d\n",data);
return 0;
}
void func(int data)
{
printf("data2=%d\n",data);
}
3.3 静态变量
?静态变量测试
#include <stdio.h>
int func(void);
int main(void)
{
int i,data;
for(i=0;i<5;i++)
{
data=func();
}
printf("data=%d\n",data);
return 0;
}
int func(void)
{
//int data=0; //局部变量,生命周期随着函数调用结束而终止。
static int data=0; //静态变量,生命周期与main函数一样。
//static int data=0 只有第一次执行有效
data++; //data=data+1 ,1
return data;
}
3.4 静态全局变量
#include <stdio.h>
//int data; 全局变量,可以在其他.c文件引用
static int data=0; //静态全局变量-----局部变量
//静态全局变量: 表示该data变量不能被其他文件所引用。
//防止全局变量,重命名。
int main(void)
{
return 0;
}
3.5 静态函数
#include <stdio.h>
static int func(void);
int main(void)
{
func();
return 0;
}
//定义静态函数,表示该函数只能在本文件使用。
static int func(void)
{
printf("123\n");
}
3.6 变量的初始化值
#include <stdio.h>
static int data1;
int data2;
int main(void)
{
int data3; //局部变量
static int data4;
printf("data1=%d\n",data1); //0
printf("data2=%d\n",data2); //0
printf("data3=%d\n",data3); //未知值
printf("data4=%d\n",data4); //0
int cnt;
//cnt++;
/*
for(i=0;i<5;i++)
{
if(xxxx)data3|=0x1;
data3<<=1;
}*/
return 0;
}
-----------------------------------
?著作权归作者所有:来自51CTO博客作者DS小龙哥,原文链接:https://blog.51cto.com/u_11822586/5256783
写在最后:另外,对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!
编程学习书籍分享:
编程学习视频分享:
整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!
对于C/C++感兴趣可以关注小编在后台私信我:【编程交流】一起来学习哦!可以领取一些C/C++的项目学习视频资料哦!已经设置好了关键词自动回复,自动领取就好了!
相关推荐
- 当 Linux 根分区 (/) 已满时如何释放空间?
-
根分区(/)是Linux文件系统的核心,包含操作系统核心文件、配置文件、日志文件、缓存和用户数据等。当根分区满载时,系统可能出现无法写入新文件、应用程序崩溃甚至无法启动的情况。常见原因包括:...
- 玩转 Linux 之:磁盘分区、挂载知多少?
-
今天来聊聊linux下磁盘分区、挂载的问题,篇幅所限,不会聊的太底层,纯当科普!!1、Linux分区简介1.1主分区vs扩展分区硬盘分区表中最多能存储四个分区,但我们实际使用时一般只分为两...
- Linux 文件搜索神器 find 实战详解,建议收藏
-
在Linux系统使用中,作为一个管理员,我希望能查找系统中所有的大小超过200M文件,查看近7天系统中哪些文件被修改过,找出所有子目录中的可执行文件,这些任务需求...
- Linux 操作系统磁盘操作(linux 磁盘命令)
-
一、文档介绍本文档描述Linux操作系统下多种场景下的磁盘操作情况。二、名词解释...
- Win10新版19603推送:一键清理磁盘空间、首次集成Linux文件管理器
-
继上周四的Build19592后,微软今晨面向快速通道的Insider会员推送Windows10新预览版,操作系统版本号Build19603。除了一些常规修复,本次更新还带了不少新功能,一起来了...
- Android 16允许Linux终端使用手机全部存储空间
-
IT之家4月20日消息,谷歌Pixel手机正朝着成为强大便携式计算设备的目标迈进。2025年3月的更新中,Linux终端应用的推出为这一转变奠定了重要基础。该应用允许兼容的安卓设备...
- Linux 系统管理大容量磁盘(2TB+)操作指南
-
对于容量超过2TB的磁盘,传统MBR分区表的32位寻址机制存在限制(最大支持2.2TB)。需采用GPT(GUIDPartitionTable)分区方案,其支持64位寻址,理论上限为9.4ZB(9....
- Linux 服务器上查看磁盘类型的方法
-
方法1:使用lsblk命令lsblk输出说明:TYPE列显示设备类型,如disk(物理磁盘)、part(分区)、rom(只读存储)等。...
- ESXI7虚机上的Ubuntu Linux 22.04 LVM空间扩容操作记录
-
本人在实际的使用中经常遇到Vmware上安装的Linux虚机的LVM扩容情况,最终实现lv的扩容,大多数情况因为虚机都是有备用或者可停机的情况,一般情况下通过添加一块物理盘再加入vg,然后扩容lv来实...
- 5.4K Star很容易!Windows读取Linux磁盘格式工具
-
[开源日记],分享10k+Star的优质开源项目...
- Linux 文件系统监控:用脚本自动化磁盘空间管理
-
在Linux系统中,文件系统监控是一项非常重要的任务,它可以帮助我们及时发现磁盘空间不足的问题,避免因磁盘满而导致的系统服务不可用。通过编写脚本自动化磁盘空间管理,我们可以更加高效地处理这一问题。下面...
- Linux磁盘管理LVM实战(linux实验磁盘管理)
-
LVM(逻辑卷管理器,LogicalVolumeManager)是一种在Linux系统中用于灵活管理磁盘空间的技术,通过将物理磁盘抽象为逻辑卷,实现动态调整存储容量、跨磁盘扩展等功能。本章节...
- Linux查看文件大小:`ls`和`du`为何结果不同?一文讲透原理!
-
Linux查看文件大小:ls和du为何结果不同?一文讲透原理!在Linux运维中,查看文件大小是日常高频操作。但你是否遇到过以下困惑?...
- 使用 df 命令检查服务器磁盘满了,但用 du 命令发现实际小于磁盘容量
-
在Linux系统中,管理员或开发者经常会遇到一个令人困惑的问题:使用...
- Linux磁盘爆满紧急救援指南:5步清理释放50GB+小白也能轻松搞定
-
“服务器卡死?网站崩溃?当Linux系统弹出‘Nospaceleft’的红色警报,别慌!本文手把手教你从‘删库到跑路’进阶为‘磁盘清理大师’,5个关键步骤+30条救命命令,快速释放磁盘空间,拯救你...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)