------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
// 枚举
枚举类型
用来把所有的可能的值都列举出来
枚举类型的作用:
把某个变量的取值,限定在一定范围之内
枚举类型的定义:
enum 枚举类型名{枚举值列表};
注意:
1> 枚举类型不是构造类型(它的元素值,都是int类型),因为他得
每个元素不能再分解为其它的基本数据类型数据
2> 枚举值: 标示符
3> 枚举类型也分为:全局的和局部的
举例:
enum weekday{zhoyi,zhouer,zhoushan,zhousi,zhouwu
zhouliu,zhouri};
#include <stdio.h>
int main(int argc, const char * argv[]) {
// 定义了一个星期的枚举类型
enum weekday{zhoyi,zhouer,zhoushan,zhousi,zhouwu
zhouliu,zhouri};
return 0;
}
枚举变量:
用枚举类型定义的变量,就事枚举变量
枚举变量的定义方法:
1> 定义枚举类型的时候,定义变量
enum sex{kSexMan,kSexWomen,kSexYao} isex;
enum {kSexMan,kSexWomen,kSexYao} sex;
2>先定义枚举类型,再定义变量
枚举变量的初始化和使用
enum sex s1;// s1的取值被限定了范围,
//只能取kSexMan,kSexWomen,kSexYao其中一个
关于枚举类型的值的问题
1> 默认值
枚举类型,一旦定义,系统会默认的给枚举类型的每个元素一个初始值
// 0 1 2
enum sex{kSexMan,kSexWomen,kSexYao};
// 0 1 2 3 4 5 6
enum weekday{zhouyi,zhouer,zhousan,zhousi=8,zhouwu,zhouliu,zhouri};
2>可以给枚举类型的元素,指定初始值
*/
#include <stdio.h>
int main(){
//枚举变量定义方式一
enum sex{kSexMan,kSexWomen,kSexYao} isex;
//枚举变量定义方式二
//enum {kSexMan,kSexWomen,kSexYao} sex;
//枚举变量定义方式三
enum sex s1,s2;//定义一个枚举类型的变量,变量名为s1,s2
//这是给枚举变量赋值,注意:枚举变量只能被赋值枚举类型中定义的某个值
s1 = kSexMan;
printf("%d\n",s1);
//定义一个新的枚举类型
// 0 1 2 8 9 10 11
enum weekday{zhouyi,zhouer,zhousan,zhousi=8,zhouwu,zhouliu,zhouri};
enum weekday day;
day = zhousi;
printf("day = %d\n",day); //8
printf("xxxx = %d\n",zhousan); //2
printf("%d\n",zhouwu); //9
return 0;
}
typedef 是一个关键字,定义类型
定义类型:
给一个已经存在的类型,起个别名 (外号)
定义类型的使用
格式: typedef 原类型 新类型(别名)
*/
#include <stdio.h>
void test1(){
//1>给基本数据类型起别名
//int ---> AV
typedef int AV;
//用新的定义变量
// num==AV
AV num = 18;
printf("%d\n",num);
}
void test2(){
//给数组起别名
int a[5];
//给int类型 长度为5 的数组起个别名
typedef int ARRAY[5];
//使用ARRAY定义了两个长度为5 并且是整形数组,数组名分别是a1,a2;
ARRAY a1={1,2,3,4,5},a2;
printf("%p,%p\n",a1,a2);
//对数组变量
for(int i =0;i<5;i++){
printf("%d\n",a1[i]);
}
}
void test3(){
//给结构体起别名
//形式一: 可以理解为把struct Student 给起个别名 STU
typedef struct Student{
int age;
int no;
}STU;
//使用STU定义结构体变量
//STU等价与struct Student
STU stu1 = {18,100};
STU *pstu = &stu1;
printf("%d,%d\n",pstu->age,pstu->no);
//形式二:
typedef struct {
int age;
int no;
}STU1;
STU1 s1 = {12,3};
//形式三:
typedef struct Student SS;
SS s2={22,4};
}
void test4(){
//给枚举类型起别名
typedef enum sex{kSexMan,kSexWomen,kSexYao} ISEX;
//使用别名,定义枚举变量
ISEX s1 =kSexMan;
//第二种形式
//给匿名的枚举类型起别名
typedef enum {kColorYellow,kColorBlack,kColorTHJ} ICOLOR;
ICOLOR color = kColorTHJ;
printf("color:%d\n",kColorTHJ);
//第三种形式
typedef enum sex SS;
SS s2 = kSexYao;
printf("sex:%d\n",s2);
}
int sum(int a,int b){
return a+b;
}
int main(int argc, const char * argv[]) {
//给函数指针起别名
//使用函数名直接调用函数
int m = sum(10,20);
//定义函数指针
//int (*psum)(int ,int )
int (*psum)(int a,int b);
//把函数的首地址赋值给psum
psum = sum;
m = (*psum)(80,20);
//这是给函数指针起别名,别名是P
//可以使用P定义函数指针变量,函数指针变量只能指向
//返回int ,有两个int类型参数的函数
typedef int (*P)(int,int);
//p1是一个函数指针变量
P p1,p2,p3;
p1 = sum;
m = (*p1)(100,20);
printf("%d\n",m);
return 0;
}
//
// main.c
// 宏
//
// Created by 李佳乐 on 15-3-22.
// Copyright (c) 2015年 李佳乐. All rights reserved.
//
/*
宏: 预处理指令,所有的以'#' 都是预处理指令
宏是一个特殊表示符,代表一个字符串,数字,表达式
宏的分类:
1 有参数的宏
1>有参宏的定义
格式: #define 宏名(形参) 宏代表的字符串
#define M(y) y*y+3*y
#define SUM(a,b) a+b
2>有参宏的使用注意
有参宏的参数不会被分配内存空间,不需要制定类型
有参宏展开的时候: 1) 把实参带入到宏的字符串中
2) 在出现宏名的地方用宏代表的字符串去替换
2 无参数的宏
无参数宏的定义方法
格式: #define 宏名 宏所代表的内容
注意:
1> 不需要使用分号结束,宏是一个预处理指令,不是语句
//此处定义了一个宏,宏名是PI 宏代表的内容是3.14
#define PI 3.14
2> 宏的名称一般都是大写的,以便区别普通变量
3> 宏,一般我们写在文件的开头部分
使用宏:
宏可以参数运算,可以是表达式的一部分
int r =3;
float area = PI*r*r;
printf("area = %.2f\n",area);
*/
#include <stdio.h>
#define PI 3.14
#define M 10
#define AREA PI*M*M
#define CAR struct Car
#define MI y*y+3*y
#define M1(y) y*y+3*y
#define SUM(a,b) (a)*(b)
#define S(a,b) a = i+3;b = 4*j;
int main(int argc, const char * argv[]) {
int r =3;
float area = PI*r*r;
printf("area = %.2f\n",area);
//#undef PI 取消宏的定义
printf("PI = %.2f\n",PI);
//宏的使用注意事项
// 1>宏的替换 宏代换
// 在程序编译之前,预处理程序会把源代码中所有出现宏名的地方就用
// 宏代表的内容去替换
// 例外:当宏名出现在字符串中,此时不会替换
printf("M = %d\n",M);
//2> 宏定义的时候,可以嵌套
printf("area = %.2f\n",AREA);
//3> 在程序中出现宏名的地方,仅仅使用宏代表的只做替换
int y =3;
int num = 3*MI + 4*MI + 5*MI;
// 3*y*y+3*y+4*y*y+3*y+5*y*y+3*y
// 3*3*3+3*3 + 4*3*3+3*3 + 5*3*3+3*3
// 36 45 54
//135
struct Car{
int lzNum;
};
CAR c1 = {4};
printf("lzNum = %d\n",c1.lzNum);
printf("num = %d\n",num);
//带参宏
int a = 3;
int num1 = M1(a);//18
//宏调用
num1 = SUM(10, 20);//200
num1 = SUM(a+3, a+5);//48
printf("%d\n",num1);
int i = 3,j = 4;
int m,n;
S(m,n);//m = i +3 ,n = 4*j
printf("m = %d,n = %d\n",m,n);
return 0;
}
//
// main.c
// typedef 和 宏的区别
//
// Created by 李佳乐 on 15-3-23.
// Copyright (c) 2015年 李佳乐. All rights reserved.
//
/*
typedef 定义类型
#define 宏定义的指令
*/
#include <stdio.h>
//定义一个宏
#define INT2 int *
//这是给int *起个别名 INT
typedef int * INT;
int main(int argc, const char * argv[]) {
int num =2 ;
// 使用宏定义一个指针变量
INT2 p,p5;
//int *p,p5;
//p是一个指针变量,p5就事一个整形变量
p = #
//通过指针变量,间接修改num的值
*p=100;
printf("num = %d\n",num);//100
//用typedef (定义) 方式,定义指针变量
INT p1,p6;//INT 原型是 int *
// INT p1,p6;== int *p1,p6;
//p1是指针变量,p6也是指针变量
p1 = #
p6 = #
*p1 = 200;
*p6 = 500;
printf("num = %d\n",num);
return 0;
}
//
// main.c
// 使用宏求最大值
//
// Created by 李佳乐 on 15-3-23.
// Copyright (c) 2015年 李佳乐. All rights reserved.
//
#include <stdio.h>
#define MAX(x,y) x>y?x:y
int main(int argc, const char * argv[]) {
// insert code here...
int a = 500,b = 438;
int max = MAX(a, b);
printf("max = %d\n",max);
return 0;
}