黑马程序员—枚举、宏定义、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培训、期待与您交流! -------
一、枚举
表示固定的几个取值;大多用来与同事之前的交流。
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培训、期待与您交流! -------
相关文章推荐
- 黑马程序员--c语言:结构体、枚举、预处理指令、typedef、static与extern、递归思想
- 黑马程序员------C语言-----宏定义、typedef、static和extern、递归
- 黑马程序员 《ios零基础教程》 --补齐算法、宏定义、typedef、递归 2014-4-20总结
- 黑马程序员--ios基础--c语言--预处理指令、typedef、static和extern、递归
- 黑马程序员---C语言基础---结构体、枚举、typedef、宏、static和extern
- 黑马程序员———C语言———【枚举、typedef、宏、static和extern、文件操作】
- 【黑马程序员】iOS学习之路——C语言之宏定义、条件编译和条件包含及typedef
- 黑马程序员——c语言复杂数据类型:结构体和枚举,typedef的使用
- 黑马程序员——零基础学习iOS开发——08 结构体、枚举、typedef
- 黑马程序员——枚举、预处理指令和递归
- 黑马程序员------C语言基础 结构体、枚举及关键字 typedef
- 黑马程序员——C语言学习——预处理指令、extern与static、typedef、递归
- 黑马程序员----C 语言学习笔记之枚举类型和typedef关键字
- C语言回顾之结构体、枚举、宏定义、typedef、extern和static的使用
- 黑马程序员_java中的枚举
- 黑马程序员——关于常量、枚举、结构、异常的总结笔记
- 黑马程序员_Java基础篇(七)——枚举
- 黑马程序员——C语言知识点总结之预处理指令和typedef关键字
- 黑马程序员——枚举和反射机制
- 黑马程序员--Java基础学习笔记【文件操作、递归】