【一起来学C语言】函数(二)

【前言】

        上篇博客我们认识了函数的定义和调用,本篇博客继续带大家总结函数的有关知识,有关函数的三种语句,有关变量的三种属性,还有最后分解C语言代码的口诀总结,看官不容错过~
           
                                                   

【有关函数的三种语句】

 定义、使用/调用、原型声明语句

1.函数的定义
函数返回值类型   函数名(形式参数列表)
{
函数体;
}
       上篇博客已经介绍过的定义方式,函数返回值类型分两种,void型和非void型(必须有return)。

2.调用 
非void型
变量名=函数名 (实参列表);

void型 

函数名 (实参列表);

上篇也介绍过了,不再赘述。


3.原型声明语句: 有类型,有分号
主要有两种形式:
函数类型 函数名(形参类型1   形参变量1,形参类型2  形参变量2…);
函数类型 函数名(形参类型1  ,形参类型2  …);

       还记不记得什么时候该原型声明大显身手呢?
       先在主函数中使用了子函数,子函数定义在主函数下方。所以,必须在主函数前进行函数原型声明。如果先定义后使用,就不用使用原型声明啦。
       以上的三种语句容易混淆,大家了解各自的特点后,就容易区分开了。
=======================================================================

【有关变量的三属性】

数据类型、 作用范围 、存储类别 跨越了“种族,空间和时间”

1.数据类型  
有类型有分号定义语句。没有类型有分号就为执行语句。

2.作用范围 :空间角度
       内部变量,局部有效 。只在所在函数内有效,不同函数的相同变量名互不干扰,所有形式的参数都是局部变量
       花括号是复合语句的标识,在复合语句中定义内部变量,就在复合语句内有效。
       外部变量, 全局有效。有效范围为整个文件,因为可以被每个函数调用,所以全局变量很容易被改掉值。如果全局变量和局部变量不凑巧的撞衫同名,局部变量就会屏蔽全局变量,只使用局部,像不像“金窝银窝都不如自己的dog窝”的感觉。

3.存储类别 :时间角度 
        变量存储类别只能是auto static register extern 四种之一,我也是到里这章才很直接清晰的认识到小变量也有大内涵。变量是有存储类别的,我们之前定义局部变量int a 啊什么的,看似只定义了数据类型为int,其实还有隐含其中的auto存储类型,因为如果没有明确写存储类型的时候,我们就默认是auto自动类型的。感觉函数这一章还是挺长知识的。

1.auto类别变量
        auto特点:调用完后就释放所占用空间,局部变量默认为auto类别,无初始化时就是随机值。使用时间短(临时),一般都为auto类别变量。
        auto int x; 定义同时说明类型,这里的auto可省略。

2.static类别变量
       static的特点:从定义到程序运行结束(时间长)均占用存储空间。全局变量默认为static,无初始化初值为0。static类别变量只进行一次初始化,从次以后,static修饰的变量就一直是一个带值前行的变量了,值修改后,可以保留传承下去。
        static int x;   /*定义同时说明类型
       TIPS小技巧:代码中,遇到静态变量,就冷静的把它画到框里,作为静态变量的保护框,然后把代码划掉,因为只初始化一次,下次就不再走初始化的语句了。

3.register类别变量
       还记不记得CPU里的寄存器?变量存储类型里居然有一个寄存器类型。register类别只能是局部变量(使用时间短,寄存器)才能被说明,当遇到大量反复调用相同语句的时候就可以考虑用register类型了。
        register int x; 定义同时说明类型

4.extern类别变量
       extern的特点是加大变量的作用范围(外部)。同一文件和不同文件之间都可以用extern来拓宽作用范围。

格式1
存储类别 类型名 变量名;

格式2
类型名 变量名;
存储类别  变量名;

举个栗子:
#include<stdio.h>
	main(){
		extern x,y;
		printf("%d,%d\n",x,y);
	}
	int x,y; 

             

       xy两个变量在main函数内没有定义,但是在main函数下面定义了,在main里想要使用xy,就要使用extern,表明我这两个xy不是师出无门,而是已在别处定义了的有门有派的变量,extern就是这样拓宽了变量的作用范围。还是蛮神奇的一个类型。     

       了解了extern,从现在起,你判断一个变量从什么时候开始有效,都有什么想法呢?

       现在可以从两点开始看了,一是从定义那句,二就是出现extern的时候,该让你的对变量作用范围的雷达敏感起来了。


【口诀总结】

最后还是要冒泡总结一下分解C语言代码时的一些口诀。

一、求表达式的值
1.先看合法性
2.合法表达式,短路优先考虑,&&与和或||
3.合法无短路,三步走,挑运算符,计算优先级别高的,同级考虑结合性
=======================================================================
二、分析结构
找配对,3配对 (花括号,else,do) 
找控制 ,6控制(if else switch where do for  就近控制算一条,复合语句算一条)
标语句
=======================================================================
三、函数调用过程
复合框架如何执行?分析小括号含义
从主函数进入,顺序执行,遇到函数调用就出门,单向传值遵循三一致(参数个数、类型、位置次序)。子函数遇到return或右花括号则返回主函数调用处,继续向下执行。

因为预编译的知识也不少,所以就打算单独拿一篇来介绍了,下次见~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 16
    评论
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值