您的位置:首页 > 其它

0041 枚举 typedef 预处理指令:宏

2015-07-27 08:34 369 查看
/*

枚举类型:

C语言提供了一个种类型,这种类型的变量的取值被限定在一定的范围之内了

枚举类型的定义:

enum 枚举类型名{  枚举值1,枚举值2,.... };

举例:

定义一个变量,保存一周的第几天

enum weekday{ zhouyi,zhouer,zhousan,zhousi,zhouwu ,zhouliu,zhouri };

定义iPhone手机的颜色

关于枚举类型元素的命名习惯

enum iColor{kIcolorWhite,kIcolorBlack,kIcolorTHJ};

定义人得性别
enum Sex{kSexMan,kSexWomen,kSexYao};

//weekday  iColor  Sex 这些都是枚举类型

*/

#include <stdio.h>
//全局的枚举类型
enum Sex{kSexMan,kSexWomen,kSexYao};
int main(int argc, const char * argv[]) {

//定义局部的枚举类型
enum weekday{ zhouyi,zhouer,zhousan,zhousi,zhouwu ,zhouliu,zhouri };

enum iColor{kIcolorWhite,kIcolorBlack,kIcolorTHJ};

return 0;
}

/*

枚举类型的变量

枚举类型的变量

枚举类型的变量的定义

enum iColor{kIcolorWhite,kIcolorBlack,kIcolorTHJ};

1)先定义枚举类型,再定义枚举变量

enum 枚举类型名  枚举变量名列表;

enum iColor  iPhoneColor;  //iPhoneColor的取值是有要求的
//取值应为kIcolorWhite,kIcolorBlack,kIcolorTHJ中的其中一个

2)定义枚举类型的同时,定义变量

enum Sex{kSexMan,kSexWomen,kSexYao} isex;

*/

#include <stdio.h>

//默认值              0           1            2
//手动赋值            5            6            7
enum iColor{kIcolorWhite=5,kIcolorBlack,kIcolorTHJ};

int main(int argc, const char * argv[]) {

//1、枚举类型变量的定义
enum iColor  iPhoneColor;  //iPhoneColor的取值是有要求的
//取值应为kIcolorWhite,kIcolorBlack,kIcolorTHJ中的其中一个

enum Sex{kSexMan,kSexWomen,kSexYao} isex;

//2、枚举类型变量的初始化

//给枚举变量赋值
iPhoneColor = kIcolorTHJ;
isex = kSexYao;

//3、枚举变量如何使用
printf("%d\n",iPhoneColor);

//4、枚举变量的值
//枚举类型定义完成以后,系统会自动给枚举的每个元素都会赋值一个整形的初值
// 默认初值:从第一个元素开始值为0,以后个元素的值,是上一个元素的值+1,
//

//5、应用
struct Person{

char *name;
//char sex; //'z'
enum Sex isex; //kSexMan,kSexWomen,kSexYao

};

//6、不按套路的出牌
iPhoneColor = 3.4;  //尽量不要这么干
printf("%d\n",iPhoneColor);

return 0;
}

//
//  main.c
//  12-typedef关键字介绍
//
//  Created by apple on 15/1/11.
//  Copyright (c) 2015年 itcast. All rights reserved.
//

#include <stdio.h>

int main(int argc, const char * argv[]) {

//typedef就给给别人起外号
int a = 10;
printf("%d\n",a+10);

//给int起个别名
typedef int MALATANG;  //typedef语句要以分号结束
//用别名定义了一个新的变量 qiezi
MALATANG qiezi = 3;
MALATANG *p = &qiezi;

printf("%d\n",qiezi+100);
printf("%d\n",*p);

return 0;
}

//
//  main.c
//  13-typedef使用方法
//
//  Created by apple on 15/1/11.
//  Copyright (c) 2015年 itcast. All rights reserved.
//

#include <stdio.h>
int sum(int a,int b){

return a+b;

}

int jian(int a,int b){

return a-b;

}

int main(int argc, const char * argv[]) {
//1、基本数据类型

typedef int  MALATANG;

//2、用在数组,给数组起别名
typedef int  ARRAY[5];   //int a[5];  数组长度为5
ARRAY a1={1,2,3,4,5},b1={5,4,3,2,1};  //int a1[5],b1[5];

for (int i=0; i<5; i++) {
printf("%d\t",b1[i]);
}

//3、给结构体其别名
struct Person {

char *name;
int age;

};

printf("\n");
struct Person p1={"zbz",18};
//给 struct Person 起个别名 P
typedef struct Person P;

//用别名定义新的变量
P p2 = {"xzmly",28};
printf("name:%s,age:%d\n",p2.name,p2.age);

//给结构体定义别名2
typedef struct Car {

int lunzi;
int speed;

}MYCAR;   //表示把结构体起个别名 MYCAR

MYCAR car1={1,200};

//给匿名的结构体起个别名
typedef struct {

int screenSize;
int ram;

}IPHONE;

//用新类型定义结构体变量
IPHONE iphone7Plus={10,8};

//4、给枚举类型起别名

//
typedef enum Sex{kSexMan,kSexWomen,kSexYao} ISEX;  //ISEX别名
//WEEKDAY也是别名
typedef enum {zhouyi,zhouer,zhousan,zhousi} WEEKDAY;

//给枚举类型起个别名 S
typedef enum Sex S;

S s1,s2;
s1 = kSexYao;
printf("%d\n",s1);

//5、给函数指针

//指向函数的指针
int (*p)(int,int);   //函数指针
//给函数中指针其别名
typedef int (*FUN)(int,int);  //FUN是一个别名
FUN f1,f2;  //f1和f2都是函数指针
f1 = jian;
printf("%d\n",f1(61,23));

return 0;
}

/*

宏:

C语言中我们自定义的特殊标示符,习惯大写

宏的定义:

#define 宏名 宏字符串(可以是常量、变量、表达式)

注意:预处理指令,经常写在函数之前
宏不是一个语句,是一个预处理指令,所以不需要加分号结束

3、宏替换

源程序在编译之前,由预处理程序对我们写的源代码进行处理:会把源代码中所有出现 宏名 的地方一律使用 宏的字符串 去替换

*/

#include <stdio.h>
#define M 10
#define M1 y*y+3*y

#define R 4
#define PI 3.14
#define AREA PI*R*R   //嵌套定义
#define INT1 int
#define P struct Person

void test(){

printf("M = %d\n",M);

}

//#undef M     //此处的作用是,取消宏定义
void test1(){

printf("test1 = %d\n",M);

}

int main(int argc, const char * argv[]) {

int a[M+2];  //int a[12]
printf("%d\n",M);  //把M的值打印出来

int y = 3,result=0;

result = 3*M1+2*M1-50;
//错误的
//       3*(y*y+3*y)+2*(y*y+3*y)-50;
//        54        +36         -50;
//        40

//正确的
//       3*y*y+3*y+2*y*y+3*y-50;
//        27  +9  + 18  + 9 -50;
//        13

printf("result = %d\n",result);

//宏使用的注意事项
//1、宏是有作用域的  #undef 宏名 可以取消宏定义
test();
test1();

//2、在字符串中出现的宏名不会被替换

//3、宏可以嵌套定义
printf("%.2f\n",AREA);

//4、使用宏其别名
INT1 a1;
a1 = 10;
printf("a1 = %d\n",a1);

P{
int age;
};

P p1 = {23};

return 0;
}

/*

宏的分类:

无参宏    #define M 10

有参宏    #define SUM(a) a+a

SUM(3)  //不仅要 a+a替换,而且还要把 实参3代入到 字符串中

*/

#include <stdio.h>
#define SUM(a) a+a
#define M1(x  ,y) (x)*(y)+(x)+(y)
#define M2(a) a+3*y
#define M3(m,n) m = a+2;n=a*2;

int main(int argc, const char * argv[]) {

int result = SUM(3);  //6
//有参宏使用
result = M1(4, 5);    //29

int y = 2;
//有参宏使用
result = M2(3);  //9

//有参宏的使用注意事项
//1、宏的形参之间可以出现空格,但是宏名和形参之间不能出现空格
int a = 3;
//2、有参宏宏的参数最好用括号括起来
result = M1(a+3, a-1);
//(x  ,y) x*y+x+y
//       6*2 +6+2
// 20

//  a+3*a-1+a+3+a-1
//  a+9  -1+a+3+a-1
//  3+9-1+3+3+3-1
//  19

int i,j;
printf("%d\n",result);
printf("i=%d,j=%d\n",i,j);

//3、可以用宏来定义多个语句
M3(i, j);
printf("i=%d,j=%d\n",i,j);

return 0;
}

//
//  main.c
//  18-typedef和#define的区别
//
//  Created by apple on 15/1/11.
//  Copyright (c) 2015年 itcast. All rights reserved.
//

#include <stdio.h>
#define INT1 int*   //定义一个宏,宏名是INT1
typedef int* TINT;  //int起一个别名 TINT
int main(int argc, const char * argv[]) {

int num = 10;
//使用宏定义变量
INT1 a,b;     //int* a,b
//a是指针
a = #
//b是普通的变量
b = num;

printf("a = %d,b = %d\n",*a,b);

//使用别名定义变量
TINT a1,b1;   //int *a1;int* b1;

a1 = #
b1 = #   //a1 和 b1 都是指针

printf("a1 = %d,b1 = %d\n",*a1,*b1);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: