C语言之第六章 常量 宏 函数

本文详细介绍了C语言中的宏定义、const常量、枚举、函数、变量作用域和存储类型,以及递归函数的使用。强调了宏定义的注意事项、枚举的赋值方式、函数的调用原理和递归的优缺点。还提醒了在编程中易犯的错误,如宏定义函数时需加括号以避免结果错误。
摘要由CSDN通过智能技术生成

1. 宏定义

格式:#define PI 3.14 (#define+ 常量名 + 值)

PS: 宏定义的常量名要大写,宏定义没有赋值符号(=),也不需要数据类型,结尾也没有分号。

宏:只是单纯文本替换。

宏定义时,常量名后面是一个整体,定义时需要注意。

例如:

           错误:

           #defineNUMBER 150+10  //这是错误的定义

           正确:

           #defineNUMBER (150+10)

Ps:宏在程序编译之前已经替换好了。

 

2. const 常量

a)  格式:const + 数据类型 + 常量名 = 值;

ps:所谓的常量,就是定义之后,不允许修改。

3.枚举

a)  枚举:一组命名的常量,并且范围数量有限。

b)  格式:enum 枚举名 {元素1,元素2…};

c)   枚举定义默认第一项低值为0,后面的项依次加1,可以在枚举中定义每一项的值,也可以定义某些项的值,未指定项,参照前一项的值加1.

4.函数

定义:完成某些特定功能的代码块,叫做函数。

优点:

a. 将程序模块化,

b. 实现代码复用

c.  使代码便于维护

格式:

           返回值类型 函数名(形式参数){函数体}

            返回值类型是void时,属于返回值函数。返回值类型是基本数据类型时,属于有返回值函数。

 

     函数的调用:函数名(实际参数);

 

     参数:

形式参数简称行参,用于函数声明以及定义时的参数列表中,用于传递数据到函数中。形参可以是变量、数组。行参只在函数内部有效。

实际参数简称实参,作为数据的载体,调用函数时用于传递数据给函数的形式参数。实参可以是变量、数组、表达式、常量、函数,都必须具有确定都值。

 

5. 变量的作用域

a)  定义:变量所能起作用的范围称为变量的作用域。

b)  局部变量:定义在函数内部的变量。可以在函数内使用,范围是定义该变量之后。还可以定在分支或者循环中。

c)   全局变量:定义在函数之外的变量。可以在任何位于该变量之后的函数中使用。

6. 变量的存储类型

a)  局部变量的三种存储类型:autostaticregister

                  i.           auto:自动型,默认就是自动型,每次使用时被创建,出了作用域被释放。

               ii.           static:静态变量,定义为静态变量之后,在程序运行期间一直保持,直到程序运行结束。

            iii.           register:寄存器型变量,类似于auto

b)  全局变量的三种存储类型:无修饰符、staticextern

                  i.           无修饰符:在程序运行时创建一次,程序结束时销毁,允许在同项目的其他文件中使用。

               ii.           static:程序运行时创建一次,程序结束时销毁,不允许在同项目的其他文件使用。

            iii.           extern:扩展其他文件中的全局变量到本文件进行使用,并不创建新到变量,而是使用已有到同名变量(函数默认为extern,可以用来扩展其他文件中到文件到本文件中使用)

 

7. 递归函数

定义:函数中自己调用自己本身的行为称为递归。

递归分为:

     直接递归:直接调用自身称为直接递归。

     间接递归:递归函数调用了其他函数,其他函数又调用了递归函数,称为间接递归。

 

递归和迭代(循环)的区别:

1. 递归从代码上看要别迭代简洁,但是系统消耗量要大于迭代。

2. 对于能够使用递归也能使用迭代解决大问题,首选迭代。

3. 注意实际使用递归时,递归大层次不应该太多,否则计算时间过长。

 

易错点:

1. 宏定义没有数据类型,没有赋值符号(=),结尾没有分号。

2. 枚举定义,没有赋值符号(=)

3. 函数递归时,忘记了函数的出口。

4. 使用已经存在的全局变量来声明局部变量。(虽然不会出错,但容易混淆),当全局变量和局部变量的变量名相同时,优先使用局部变量。

5. 宏定义函数

a)  格式:#define 宏函数名函数名

                  i.           例如:#define PTF(x) printf(x)

               ii.                 #define FUN(x) ((x) *(x))

b)  注意:被替换的函数需要加括号,不然结果有可能不一致。

                  i.           例如:#define FUN(x) x*x     FUN( 3 +2 ) = 3 +2 * 3 + 2=11 结果不对。

               ii.            #define FUN(x) ((x)*(x))  FUN(3+2)=((3+2)*(3+2))=25 结果是对的。

6.  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值