黑马程序员—枚举、宏定义、typedef、递归

来源:互联网 发布:hap编码软件 编辑:程序博客网 时间:2024/06/05 13:30

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、枚举

       表示固定的几个取值;大多用来与同事之前的交流。

1、定义枚举类型

enum Season

{     

       spring,

       summer,

       autumn,

       winter

};//大括号中代表值,以后取值只能为括号中的固定几个值。

2、定义枚举变量

enum  Season  s = summer;

#include <stdio.h>int main(){    enum Sex { Man, Woman, Unkown};        // 0男  1女 -1不详    //int sex = 3;    //enum Sex s = Unkown;        // 1.定义枚举类型    enum Season    {        spring = 1,        summer,        autumn,        winter    };        // 2.定义枚举变量    enum Season s = 100000;            printf("%d\n", s);            return 0;}

二、宏定义

1、不带参数的宏定义

       为预处理指令,以#号开头。用来定义常量,宏名一般用大写或者以k开头;

       某一个值整个文件都用得上,用宏定义;

       例外:出现在双引号中不替换值;

       预处理指令在代码翻译成0和1之前执行;

       位置可以随便写;但是有作用域:从编写指令的那一行开始,一直到文件的结尾;

       #undef COUNT:若想在某行使宏定义失效,取消定义。

#define   COUNT /kCount  6   

#undef  COUNT /kCount

#include <stdio.h>#define COUNT 4int main(){    char *name = "COUNT";        printf("%s\n", name);        #define COUNT 4        int ages[COUNT] = {1, 2, 67, 89};                for ( int i = 0; i<COUNT; i++) {        printf("%d\n", ages[i]);    }        // 从这行开始,COUNT这个宏就失效#undef COUNT        int a = COUNT;        return 0;}

2、带参数的宏定义

      宏定义只换代码,纯粹的替换,不运算;

      注意:在后面的运算,每个参数加一个括号,结果值加一个括号;

      效率比函数高;

#include <stdio.h>#define sum(v1, v2) ((v1)+(v2))#define pingfang(a) ((a)*(a))int main(){        int c = pingfang(5+5)/pingfang(2);        printf("c is %d\n", c);    /*    int c = sum(2, 3) * sum(6, 4);        printf("c is %d\n", c);*/    /*    int a = 10;        int b = 20;            int c = sum(a, b);        printf("c is %d\n", c);    //int c = sum(a, b);*/        return 0;}

三、typedef

1、作用

      给已经存在的类型起一个新的名称;

2、适用场合

      基本数据类型

typedef int MyInt;typedef MyInt MyInt2;

      指针

typedef struct Person{    int age;} * PersonPoint;

      结构体

/*struct Student{    int age;};typedef struct Student MyStu;*//*typedef  struct Student{    int age;} MyStu;*/

      枚举

typedef enum {    Man,    Woman} MySex;

      指向函数的指针

typedef int (*MyPoint)(int, int);int minus(int a, int b){    return a - b;}int sum(int a, int b){    return a + b;}//MyPoint p = sum;//MyPoint p2 = minus;//int (*p)(int, int) = sum;//int (*p2)(int, int) = minus;

四、递归

       条件

1、函数自己调用自己;

2、必须有个明确的返回值;

#include <stdio.h>int pow2(int b, int n);int main(){    int c = pow2(3, 2);        printf("%d\n", c);    return 0;}/* pow2(b, 0) == 1 pow2(b, 1) == b == pow2(b, 0) * b pow2(b, 2) == b*b == pow2(b, 1) * b pow2(b, 3) == b*b*b == pow2(b, 2) * b  1> n为0,结果肯定是1 2> n>0,pow2(b, n) == pow2(b, n-1) * b */int pow2(int b, int n){    if (n <= 0) return 1;    return pow2(b, n-1) * b;}/*int pow2(int b, int n){    // 用来保存计算结果    int result = 1;            //result *= b;    //result *= b;    //result *= b;    //result *= b;    //....        //n次        for (int i = 0; i<n; i++)    {        result *= b;    }        return result;}*/

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

0 0
原创粉丝点击