联合 枚举 双指针 万能指针void*

来源:互联网 发布:相册网站设计源码 编辑:程序博客网 时间:2024/06/11 00:16

1.联合

1.1 联合是程序员自己创建的一种数据类型

typedef union U{                   //联合中的所有成员变量共用一块存储空间    int x;    int y;    int z;};...        U u1;        NSLog(@"%lu",sizeof(u1));        u1.x=10;        NSLog(@"%d,%d,%d ",u1.x,u1.y,u1.z);    //(输出结果:101010)其他两个也会为10...       
typedef union {    char ch[4];    int x;               }Data;...Data d;                      d.x=0x41424344;            //每两个16进制数占4个字节,按小端存储 。        for(int i=0;i<4;i++){            printf("%c ",d.ch[i]);            //ASCLL码,   输出结果(D C B A)        }         printf("\n");    ...

2.枚举

2.1 也是程序员自己创建的一种数据类型

typedef enum{    MONDYA=100,TUESDAY,WEDNESDAY,THURDAY=200,FRIDAY,SATURDAY,SUNDAY,}Weed;           //常量必须为整数,可以指定值,不指定的值按前边指定的值依次+1;void show(Weed type){    switch (type) {        case MONDYA: //增加代码可读性            NSLog(@"星期一");            break;        case TUESDAY:            NSLog(@"星期二");            break;        case WEDNESDAY:            NSLog(@"星期三");            break;        case THURDAY:            NSLog(@"星期四");            break;        case FRIDAY:            NSLog(@"星期五");            break;        case SATURDAY:            NSLog(@"星期六");            break;        case SUNDAY:            NSLog(@"星期日");            break;    }int main(){    @autoreleasepool {        NSLog(@"%d",MONDYA); /        NSLog(@"%d",TUESDAY);              NSLog(@"%d",SUNDAY);      // 输出结果(100  101   203)        show(MONDYA);                     //输出结果   (星期一)    }    return 0;}

3.双指针

3.1 指针的指针
3.2 值传递的本质是在函数体内修改形参本身
3.3地址传递的本质是在函数中修改形参指向的变量

void get(char** str){    *str ="abcd";}  int main(){    @autoreleasepool {        int x=10;        int* px=&x;        int** ppx=&px;        **ppx=20;        NSLog(@"%d",x);     //输出结果(20)        char *msg=nil;        get(&msg);        printf("%s\n",msg);    //输出结果(abcd)    }    return 0;}

4.万能指针void*

4.1 万能指针,可以指向任意类型的变量,
4.2 在使用时,需先将其转换回指向的变量的类型

int main(){    @autoreleasepool {        int x=10;        int *px=&x; //同一类型的指针只能指向同一类型的变量        NSLog(@"%d",*px);        double *pd=&x; //不用类型的指针,不能指向不同的类型的变量        NSLog(@"%lg",*pd); //输出垃圾值        void *p=&x;        //定义万能指针        double d=3.14;        p=&d; //void* 类型的指针可以指向任意类型的变量        NSLog(@"%lg",*(double *)p); //万能指针在引用其指向的变量时,需先将其转换回指向的变量的类型    }    return 0;}
 //编写一个函数,用万能指针做形参,打印任意类型的变量值typedef enum{    INT,FLOAT,DOUBLE,CHAR,}Type;void print(void *p,Type type){    switch (type) {        case INT:            NSLog(@"%d",*(int*)p);            break;        case FLOAT:            NSLog(@"%g",*(float*)p);            break;        case DOUBLE:            NSLog(@"%lg",*(double*)p);            break;        case CHAR:            NSLog(@"%c",*(char*)p);            break;    } }int main(){    @autoreleasepool {        int a=10;        char b='a';        float c=3.14;        print(&a,INT);        print(&c, FLOAT);        print(&b,CHAR);    }}
0 0
原创粉丝点击