您的位置:首页 > 职场人生

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

2015-02-10 20:48 239 查看
------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 4

int 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,po
4000
w2(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培训、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐