联合 枚举 双指针 万能指针void*
2016-08-24 18:51
211 查看
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); //(输出结果:10,10,10)其他两个也会为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); } }
相关文章推荐
- 联合、枚举、双指针、void*、函数指针
- Day14、枚举、联合、二级指针、回调函数、动态内存分配
- C语言基础教程(四)指针、结构、联合和枚举
- 万能指针: void*
- c笔记11---联合,枚举,堆 malloc,大/小端存储,二级指针,函数指针,qsort 排序,指针数组
- 联合与枚举 、 高级指针 、 C语言标准库(一)
- 联合与枚举 、 高级指针 、 C语言标准库(一)
- 结构体、联合、枚举与高级指针
- C数据类型和组合类型(结构、联合、枚举和typedef)
- 【C】【笔记】《C和指针》第10章 结构和联合 第11章 动态内存分配 第12章 使用结构和指针 第13章 高级指针话题 第14章预处理器
- C和指针 (pointers on C)——第十章:结构体和联合(上)
- C语言学习10:结构体,结构体应用,联合用法,枚举,fopen函数使用,fseek,ftell的作用和文件结束符EOF,数组和文件交换数据,个人信息管理。
- C语言编程基础-15结构体 枚举 联合
- c语言中结构、联合、枚举的用法
- [枚举] 多校联合第四场 hdu328 problem killer
- 虚函数指针sizeof不为sizeof(void*)
- 枚举和指针类型
- void 指针 void*
- 空指针和void*指针
- C++中void和void*指针的含义