当前位置: 首页 > news >正文

昆明汽车建站网站模板长沙做网站 必看 磐石网络

昆明汽车建站网站模板,长沙做网站 必看 磐石网络,做药物研发的人上什么网站,wordpress 重新初始化​ ✨个人主页#xff1a; 熬夜学编程的小林 #x1f497;系列专栏#xff1a; 【C语言详解】 【数据结构详解】 函数 1、嵌套调用和链式访问 1.1、嵌套调用 1.2、链式访问 2、函数的声明和定义 2.1、单个文件 2.2、多个文件 2.3、static 和 extern 2.3.1、static… ​ ✨个人主页 熬夜学编程的小林 系列专栏 【C语言详解】 【数据结构详解】 函数 1、嵌套调用和链式访问 1.1、嵌套调用 1.2、链式访问 2、函数的声明和定义 2.1、单个文件 2.2、多个文件 2.3、static 和 extern 2.3.1、static 修饰局部变量 2.3.2、static 修饰全局变量 2.3.3、static 修饰函数 总结 1、嵌套调用和链式访问 1.1、嵌套调用 嵌套调用就是函数之间的互相调用每个函数就像⼀个乐高零件正是因为多个乐高的零件互相无缝的配合才能搭建出精美的乐高玩具也正是因为函数之间有效的互相调用最后写出来了相对大型的程序。 假设我们计算某年某月有多少天如果要函数实现可以设计2个函数: • is_leap_year()根据年份确定是否是闰年 • get_days_of_month()调⽤is_leap_year确定是否是闰年后再根据月计算这个月的天数 闰年的判断规则 1、能被400整除为闰年 2、能被4整除但是不能被100整除为闰年 int is_leap_year(int y) {if(((y%40)(y%100!0))||(y%4000))return 1;//是闰年返回1elsereturn 0;//不是闰年返回0 } int get_days_of_month(int y, int m) {int days[] {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};//数组的下标代表月份 初始化为不是闰年的情况每月的天数int day days[m];if (is_leap_year(y) m 2)day 1;//为闰年则将2月加一天return day;//返回天数 } int main() {int y 0;int m 0;scanf(%d %d, y, m);int d get_days_of_month(y, m);printf(%d\n, d);return 0; } 这⼀段代码完成了⼀个独立的功能。代码中反应了不少的函数调用 • main 函数调用 scanf 、 printf 、 get_days_of_month • get_days_of_month 函数调用 is_leap_year 未来的稍微⼤⼀些代码都是函数之间的嵌套调用但是函数是不能嵌套定义的。 1.2、链式访问 所谓链式访问就是将⼀个函数的返回值作为另外⼀个函数的参数像链条⼀样将函数串起来就是函数的链式访问。 比如 #include stdio.h int main() {int len strlen(abcdef);//1.strlen求⼀个字符串的⻓度printf(%d\n, len);//2.打印⻓度 return 0; } 前面的代码完成动作写了2条语句把如果把strlen的返回值直接作为printf函数的参数呢这样就是⼀个链式访问的例子了。 #include stdio.h int main() {printf(%d\n, strlen(abcdef));//链式访问return 0; } 在看⼀个有趣的代码下⾯代码执行的结果是什么呢 #include stdio.h int main() { printf(%d, printf(%d, printf(%d, 43))); return 0; } 这个代码的关键是明白 printf 函数的返回是啥 int printf ( const char * format, ... ); printf函数返回的是打印在屏幕上的字符的个数。 上面的例子中我们就第⼀个printf打印的是第⼆个printf的返回值第⼆个printf打印的是第三个 printf的返回值。 第三个printf打印43在屏幕上打印2个字符再返回2 第⼆个printf打印2在屏幕上打印1个字符再放回1 第⼀个printf打印1所以屏幕上最终打印4321 2、函数的声明和定义 2.1、单个文件 ⼀般我们在使用函数的时候直接将函数写出来就使用了。 比如我们要写⼀个函数判断⼀年是否是闰年。 #include stdio.h //判断⼀年是不是闰年 int is_leap_year(int y)//第三行 {if(((y%40)(y%100!0))||(y%4000))return 1;//是闰年返回1elsereturn 0;//不是闰年返回0 }//第八行 int main() {int y 0;scanf(%d, y);int r is_leap_year(y);//第十三行if(r 1)printf(闰年\n);elseprintf(⾮闰年\n);return 0; } 上面代码中第三行到第八行是函数的定义第十三行是函数的调用。这种场景下是函数的定义在函数调用之前没啥问题。 那如果我们将函数的定义放在函数的调用后边如下 #include stdio.h int main() {int y 0;scanf(%d, y);int r is_leap_year(y);//第6行if(r 1)printf(闰年\n);elseprintf(⾮闰年\n);return 0; } //判断⼀年是不是闰年 int is_leap_year(int y) {if(((y%40)(y%100!0)) || (y%4000))return 1;elsereturn 0; } 这个代码在VS2022上编译会出现下面的警告信息 这是因为C语言编译器对源代码进行编译的时候从第⼀行往下扫描的当遇到第6行的is_leap_year函数调用的时候并没有发现前面有is_leap_year的定义就报出了上述的警告。 把怎么解决这个问题呢就是函数调用之前先声明⼀下is_leap_year这个函数声明函数只要交代清楚函数名函数的返回类型和函数的参数。 如int is_leap_year(int y)这就是函数声明函数声明中参数只保留类型省略掉名字也是可以 的。 代码变成这样就能正常编译了。 #include stdio.h int is_leap_year(int y);//函数声明 int main() {int y 0;scanf(%d, y);int r is_leap_year(y);if (r 1)printf(闰年\n);elseprintf(非闰年\n);return 0; } //判断一年是不是闰年 int is_leap_year(int y) {if (((y % 4 0) (y % 100 ! 0)) || (y % 400 0))return 1;elsereturn 0; } 函数的调用⼀定要满足先声明后使用 函数的定义也是⼀种特殊的声明所以如果函数定义放在调用之前也是可以的。 2.2、多个文件 ⼀般在企业中我们写代码时候代码可能比较多不会将所有的代码都放在⼀个文件中我们往往会根据程序的功能将代码拆分放在多个文件中。 ⼀般情况下函数的声明、类型的声明放在头文件.h中函数的实现是放在源⽂件.c⽂件中。 如下 add.c //函数的定义 int Add(int x, int y) {return xy; } add.h //函数的声明 int Add(int x, int y); test.c #include stdio.h #include add.h int main() {int a 10;int b 20;//函数调⽤int c Add(a, b);printf(%d\n, c);return 0; } 运行结果 有了函数声明和函数定义的理解我们写代码就更加方便了。 2.3、static 和 extern static 和 extern 都是C语⾔中的关键字。 static 是 静态的 的意思可以用来• 修饰局部变量 • 修饰全局变量 • 修饰函数 extern 是⽤来声明外部符号的。 在讲解 static 和 extern 之前再讲⼀下作用域和生命周期。 作用域scope是程序设计概念通常来说⼀段程序代码中所用到的名字并不总是有效可用的而限定这个名字的可用性的代码范围就是这个名字的作用域。1. 局部变量的作用域是变量所在的局部范围。 2. 全局变量的作用域是整个工程项目。 ⽣命周期指的是变量的创建(申请内存)到变量的销毁(收回内存)之间的⼀个时间段。1. 局部变量的生命周期是进入作用域变量创建生命周期开始出作用域生命周期结束。 2. 全局变量的生命周期是整个程序的生命周期。 2.3.1、static 修饰局部变量   //代码1 #include stdio.h void test() {int i 0;i;printf(%d , i); } int main() {int i 0;for(i0; i5; i){test();}return 0; } //代码2 #include stdio.h void test() {//static修饰局部变量static int i 0;i;printf(%d , i); } int main() {int i 0;for(i0; i5; i){test();}return 0; } 对比代码1和代码2的效果理解 static 修饰局部变量的意义。 代码1的test函数中的局部变量 i 是每次进入test函数先创建变量生命周期开始并赋值为0然后 再打印出函数的时候变量生命周期将要结束释放内存。 代码2中我们从输出结果来看i 的值有累加的效果其实 test函数中的 i 创建好后出函数的时候是不会销毁的重新进入函数也就不会重新创建变量直接上次累积的数值继续计算。 结论static修饰局部变量改变了变量的生命周期生命周期改变的本质是改变了变量的存储类型本来⼀个局部变量是存储在内存的栈区的但是被 static 修饰后存储到了静态区。存储在静态区的变量和全局变量是⼀样的生命周期就和程序的生命周期⼀样了只有程序结束变量才销毁内存才回收。但是作用域不变的。 使用建议未来⼀个变量出了函数后我们还想保留值等下次进入函数继续使用就可以使用static修饰。 2.3.2、static 修饰全局变量 代码1 add.c int g_val 2018; test.c #include stdio.h extern int g_val; int main() {printf(%d\n, g_val);return 0;} 代码2 add.c static int g_val 2018; test.c #include stdio.h extern int g_val; int main() {printf(%d\n, g_val);return 0; } extern 是用来声明外部符号的如果⼀个全局的符号在A文件中定义的在B文件中想使用就可以使用 extern 进行声明然后使用。 代码1正常代码2在编译的时候会出现链接性错误。 结论⼀个全局变量被static修饰使得这个全局变量只能在本源文件内使用不能在其他源文件内使用。 本质原因是全局变量默认是具有外部链接属性的在外部的文件中想使用只要适当的声明就可以使用但是全局变量被 static 修饰之后外部链接属性就变成了内部链接属性只能在自己所在的源文件内部使用了其他源⽂件即使声明了也是无法正常使用的。 使用建议如果⼀个全局变量只想在所在的源文件内部使用不想被其他文件发现就可以使用 static修饰。 2.3.3、static 修饰函数 代码1 add.c int Add(int x, int y) {return xy; } test.c #include stdio.h extern int Add(int x, int y); int main() {printf(%d\n, Add(2, 3));return 0; }代码2 add.c static int Add(int x, int y) {return xy; } test.c #include stdio.h extern int Add(int x, int y); int main() {printf(%d\n, Add(2, 3));return 0; } 代码1是能够正常运行的但是代码2就出现了链接错误。 其实 static 修饰函数和 static修饰全局变量是⼀模⼀样的⼀个函数在整个⼯程都可以使用被static修饰后只能在本文件内部使用其他⽂件⽆法正常的链接使用了。 本质是因为函数默认是具有外部链接属性具有外部链接属性使得函数在整个⼯程中只要适当的声明就可以被使用。但是被 static 修饰后变成了内部链接属性使得函数只能在自己所在源⽂件内部使用。 使用建议⼀个函数只想在所在的源文件内部使用不想被其他源文件使用就可以使用 static 修 饰。 总结 本篇博客就结束啦谢谢大家的观看如果公主少年们有好的建议可以留言喔谢谢大家啦
http://www.sczhlp.com/news/202796/

相关文章:

  • 创意视觉网站wordpress怎么实现注册功能
  • html可以做网站分页济南市新闻最新消息
  • 深圳网站设计 深圳市利中国建设银行陕西分行网站
  • 微信网站 教程做地推的网站
  • php做简单网站教程视频网页空间是什么意思
  • 免费软件app网站下载大全中国建设银行网站 纪念币预约
  • 公司制作网站怎么做的pc 网站建设
  • 诏安县城乡建设局网站南宁东凯做网站的公司
  • 室内设计师上网第一站免费咨询医生回答在线
  • WordPress维护模式完整指南:手动实现与插件方案
  • Lean语言如何连接数学与编程
  • 移动端网站生成器深圳企业网站
  • 百度浏览器官方网站电子商务主要做什么工作
  • 揭阳网站建设云应用开发
  • 网站运营面试问题百度自动驾驶技术
  • 大兴网站建设优化seo020网站管理系统模板
  • 搭建网站是什么意思网络营销上的网站建设流程
  • 什么是行业网站?做网站排名推广效果怎么样
  • 仿网站后台怎么做余姚市建设协会网站
  • 学习如何做网站制作公司内部网站
  • 深圳 网站建设设计庐江县住房和城乡建设局网站
  • 嘉兴网站建设科技有限公司阿里云虚拟主机做淘客网站
  • 网页制作与网站建设服务器北京网站设计培训班
  • 网站域名迁移公告北京搜索引擎关键词优化
  • 免费网站入口2022伊园专业外贸网站建设 诚信 青岛
  • 网站开发内容怎么写wordpress 开源协议
  • 高端 建站WordPress 免费汉化主题
  • 淘客网站怎么建设上海seo培训中心
  • 绿韵建设有限公司网站wordpress theme api
  • 视频网站做漫画没有网站如何做淘宝客