C语言考前的查漏补缺【函数的基本知识】

在这里插入图片描述

C语言考前查漏补缺=W=

首先会将自己遇到的问题列出来,然后综合起一个模块一起回答=W=
一、C语言函数的基本知识
1.对于函数的理解:C语言中,函数可以没有形式参数么?
2.函数的缺省返回类型为什么形?
3.函数在命名时,形式参数,局部变量,外部参数的同名问题
4.静态变量的真正用法和含义
5.关于return语句的理解
6.一个实例,用于说明其关系。
问题的回答

变量类型定义位置作用域储存位置解释说明
全局变量函数体外定义点起到整个程序结束静态储存区生命周期为整个运行期间,static类型全局变量仅限本文件使用,非static可用extern声明后使用
静态局部变量函数体内所在函数语句块内部静态储存区定义时使用关键字static,生命周期为程序的的整个运行期间
自动局部变量函数体内所在函数语句块内部动态数据区定义时使用关键字auto(可省略),周期为函数(或者语句块)的执行期间。
寄存器变量函数体内所在函数语句块内部CPU通用寄存器定义时使用关键字register,现很少使用

A1:
C语言中,函数当然可以没有形式参数,但是函数在定义时是平等的,既函数不可以嵌套定义,如果函数的返回参数缺省,那么自动填补成int。
A2:
函数的返回参数值缺省,自动填补成int形。
A3:
1.局部变量的作用域仅仅在本函数或者语句块,所以不同函数中可以出现相同名字的局部变量。
2.形式参数作为局部变量的一种,其作用域在该函数(语句块中),其本身就是调用主函数中的局部变量,或者全局变量,故两者本身不在同一段作用域中,因此,形式参数可以与对应的实在参数变量同名
eg:#include <stdio.h>
int fun(int x)
{ printf("%d",x);
return 0;}
int main()
int x;
scanf("%d",&x);
fun(x);
return 0;
}//其是合理且正确的
3.外部变量是在函数外部定义的变量,与局部变量可以同名,只不过在同名局部变量所在的作用域内部该全局变量将不再起作用。
4.形式参数不能与局部变量同名,因为局部变量与函数(语句块)的形式参数在同一段作用域,其相互影响,产生变量歧义。
A4:(借鉴大佬博客)
通常,在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存。但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。但有时候我们需要在两次调用之间对变量的值进行保存。

通常的想法是定义一个全局变量来实现。但这样一来,变量已经不再属于函数本身了,不再仅受函数的控制,给程序的维护带来不便。

静态局部变量正好可以解决这个问题。静态局部变量保存在全局数据区,而不是保存在栈中,每次的值保持到下一次调用,直到下次赋新值。

静态局部变量有以下特点:

1.该变量在全局数据区分配内存;
2.静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
3.静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
4.它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。

A5:
return语句一般与函数的返回值有关系,不妨将其分成void型和非void型两大类进行讨论总结
1.对于void型:其可以没有return语句,函数执行到函数体的结束标志右大括号时会自动停止,或者可以有return,但是其后不跟任何表达式,表示执行到此处时返回。
2.对于非void型:其必须有return语句,并且return后表达式应与返回值的形式一样,不一样时就会进行自动类型转换(会导致数据不准确),执行return时,系统将自动生成无名变量用来储存,接受该值,函数的生命周期结束后,该空间立即被释放
A6:一个例子=W=

#include <stdio.h>
int fun(int i)
{
	return i*i;
 } 
 int main()
 {
 	int i=0;//主函数定义的自动变量i 
 	i=fun(i);
 	for( ;i<3;i++)
 	{
 		static int i=1;//复合语句中定义的静态变量i 
 		i+=fun(i);
 		printf("%d",i);
	 }
	 printf("%d",i);
	 return 0;
 }

其答案为:
2,6,42,3
前三个答案是i在循环里进行计算和表达
最后一个是输出了主函数定义里的i的值,也可以说的上是循环了几次。
本菜鸡的总结结束勒!
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值