C语言回顾(八、结构体,联合/共用体,枚举)——iOS开发基础
2015-06-22 21:53
441 查看
说明:
在学习UI高级知识之前,将利用最近十来天的时间回顾一下C语言,主要按照《C程序设计(谭浩强版)》来回顾。
整理一些知识点(不是细节,知识个人觉得较重要或易忘的)以及挑一些课后题目或经典习题编写代码练习。
第9章 用户自己建立数据类型
1、结构体:用户自己建立由不同类型数据组成的组合体的数据结构
为了更加直观的感受知识点,将各种知识点以代码及注释的形式说明。
output:
2、共用体/联合:使几个不同的变量共享同一段内存的结构
为了更加直观的感受知识点,将各种知识点以代码及注释的形式说明。
output:
3、枚举:把可能的值一一列举出来,变量的值只限于列举出来的值的范围内。enum开头。
为了更加直观的感受知识点,将各种知识点以代码及注释的形式说明。
output:
在学习UI高级知识之前,将利用最近十来天的时间回顾一下C语言,主要按照《C程序设计(谭浩强版)》来回顾。
整理一些知识点(不是细节,知识个人觉得较重要或易忘的)以及挑一些课后题目或经典习题编写代码练习。
第9章 用户自己建立数据类型
1、结构体:用户自己建立由不同类型数据组成的组合体的数据结构
为了更加直观的感受知识点,将各种知识点以代码及注释的形式说明。
#include <stdio.h> struct Date { int month; int day; }; struct Student { char name[20]; int age; char sex; struct Date Birthday; //成员可以属于另一个结构体 }student1 = {"Nong Chaozhe",21,'M',{2,18}}; //定义结构体并初始化 int main(int argc, const char * argv[]) { struct Student student2 = student1; //同类结构体可以相互赋值 int age = 10; //结构体中成员们可以与程序中变量名相同,但不代表同一个对象 printf("student1:%s,%d岁,%c,%d月%d日\n",student1.name,student1.age,student1.sex,student1.Birthday.month,student1.Birthday.day); //输出数据 //结构体数组 struct Date festival[3] = {1,1,{5,1},10,1}; //结构体数组,逗号,按顺序赋值,加不加括号都可以 printf("元旦:%d.%d\n",festival[0].month,festival[0].day); //结构体指针 struct Student *p = NULL; p = &student2; printf("student2:%s,%d岁,%c,%d月%d日\n",(*p).name,p->age,p->sex,(*p).Birthday.month,(*p).Birthday.day); //指针变量两种访问成员变量的方式,还有一种就是student2.name //指向结构体数组的指针 struct Date *p1 = NULL; for (p1 = festival; p1 < festival+3; p1++) { printf("节日:%d.%d\n",p1->month,p1->day); } //p1+1意味着p1所增加的值为结构体数组festival一个元素所占的字节,指向festival[1]; // 结构体变量或结构体变量的指针作函数参数 // 与之前的数组等等都类似,不作累述 printf("%lu\n",sizeof(student1)); // 根据结构体情况占37个字节 (20+4+1+(2*4)=33),但是结果是36 // 因为计算机对内存的管理是以“字”为单元的(一般4个字节1个字)。如果一个字只存放一个字符占一个字节,但该字中得其他3个字节不会接着存放下一个数据,而会从下一个字开始存放,因此得到的不是33,而是36。结果必然是4的倍数。 return 0; }
output:
student1:Nong Chaozhe,21岁,M,2月18日 元旦:1.1 student2:Nong Chaozhe,21岁,M,2月18日 节日:1.1 节日:5.1 节日:10.1 36
2、共用体/联合:使几个不同的变量共享同一段内存的结构
为了更加直观的感受知识点,将各种知识点以代码及注释的形式说明。
#include <stdio.h> union Data { int i; char ch; float f; }a = {97}; //可以在声明类型同时定义变量,对第一个成员初始化 //错误!:a = {1,'a',1.5} 不能同时初始化3个成员 //共用体是同一内存段用来存放几种不同类型的成员,但每一瞬间只能存其中一个成员,而不是同时存放几个,重复情况下后赋值会覆盖前者 int main(int argc, const char * argv[]) { printf("%d\n",a.i); //输出整数97 printf("%c\n",a.ch); //输出字符‘a’ printf("%f\n",a.f); //输出实数0.0000 // 初始化97赋值给a.i,按整数型是存储在变量单元中,最后一个字节是“01100001”。上面三种输出只是对变量单元内的东西按照不同形式输出而已。 union Data b = {.ch = 'A'}; //也可以对指定成员进行初始化 b.f = 1.5; b.i = 121; printf("%c\n",b.ch); //输出的不是‘A’,而是最后存入的121对应的ASCII值 b = a; //同类型的共用体变量互相赋值 printf("%p,%p,%p,%p\n",&a,&a.i,&a.ch,&a.f); //4个地址相同 printf("%lu\n",sizeof(a)); //共用体变量所占的内存长度为最长的成员的长度 return 0; }
output:
97 a 0.000000 y 0x100001018,0x100001018,0x100001018,0x100001018 4
3、枚举:把可能的值一一列举出来,变量的值只限于列举出来的值的范围内。enum开头。
为了更加直观的感受知识点,将各种知识点以代码及注释的形式说明。
#include <stdio.h> typedef enum { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday }Weekday; //利用typedef定义新类型名 int main(int argc, const char * argv[]) { Weekday date = Monday; // 等价于 date = 0;因为每一个枚举元素都代表一个整数,C语言编译按定义时的顺序默认他们的值为0,1,2,3,4,5…… printf("%d\n",date); //输出‘0’ // 既然是数字,那么不同的枚举元素之间是可以比较=,>,<,==等等的 if (date == Monday) { printf("Yes\n"); } return 0; }
output:
0 Yes
相关文章推荐
- C++文件读写详解(ofstream,ifstream,fstream)
- 黑马程序员--C语言关键字,注释
- c++中*、->、&
- 冒泡排序
- 【学习笔记】【C语言】二维数组
- C++ 关键字typeid
- OJ第二批——Problem B:处理成绩(C++类训练)
- Qt中C++运算符重载
- OJ第二批——Problem A:C++类实现最大数的输出
- 第14章 C++代码重用
- C语言static 具体分析
- C++中的内存管理
- C++获取系统时间
- 用C++设计一个不能被继承的类
- C语言实现十进制小数转二进制
- C++类型转换
- C++第八章
- C++第七章
- <Effective C++>读书笔记-4
- C++内联函数、函数模板之于头文件