******************* 其他数据类型 *******************

------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;

    //通过指针变量,间接修改num的值

    *p=100;

    printf("num = %d\n",num);//100

    

    //typedef (定义) 方式,定义指针变量

    

    INT p1,p6;//INT 原型是 int *

    // INT p1,p6;== int *p1,p6;

    //p1是指针变量,p6也是指针变量

    p1 = &num;

    p6 = &num;

    

    *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;

}








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值