黑马程序员 -- C语言 结构体 预编译
来源:互联网 发布:财新 数据新闻 编辑:程序博客网 时间:2024/06/05 18:16
第六讲 结构体 预编译
A.结构体
1.数组:只能有多个相同类型的数据构成。结构体:可以有多个不同类型的数据构成。
2.建立结构的声明;
a.定义结构体类型。
Struct person {
int age;
double height;
char *name;
}
b.根据结构体类型,定义结构体变量
//此处们是person结构类型的变量
struct person men = {20, 150, “jack”};//声明并且初始化
c.访问结构中的数据使用.运算符,同时也是可以这样初始化
printf(“%d %d %p”, men.age, men.height,men.name);
men.age = 10;
men.height = 150;
men.name = “jcak”;
//初始化的时候不可以这样来
struct person men;
men = {20, 150, “jack”};
3.结构体的内存分析
a.定义时间结构体
Struct Date {
Int year;
Int month;
Int day;
}
b.定义结构体变量
struct Date d1 = {2015, 4, 10};
c.以上数据在内存中的分配是:
//在定义结构体类型的时候,仅仅定义类型,并没有分配存储空间
//定义结构体变量的时候,才分配内存空间。默认情况下,分配的内存空间为结构体内数据类型所占字节数。4 + 4 + 4 = 12。
//补齐算法,结构体所占用的存储空间,必须是 最大成员字节数的倍数。
4.定义结构体的方式;
a.方式1
//定义时间结构体
Struct Date {
Int year;
Int month;
Int day;
};
//定义结构体变量
struct Date d1 = {2015, 4, 10};
b.方式2
//定义类型的同时定义变量
Struct Date {
Int year;
Int month;
Int day;
}stu;
c.方式3
//直接定义类型变量
Struct {
Int year;
Int month;
Int day;
}ste;
5.结构体类型的作用域
6.结构体数组
7.指向结构体的指针
Sturct Student {
Int no;
Int age;
};
//结构体变量
Struct Student stu = {10, 45};
//指针变量p指向structStudent类型的数据舱
Struct Student *p;
//指针变量p指向stu的变量
P = &stu;
//3种访问方式
Printf(“age = %d , no = %d”, stu.age,stu.no);
Printf(“age = %d , no = %d”, (*p).age, (*p).no);
Printf(“age = %d , no = %d”, p->age,p->no);
8.结构体的嵌套
B.枚举类型
1.可以使用枚举类型声明代表整数敞亮的符号名称。通过关键字enum,可以创建一个新的“类型”并指定它可以具有的值。实际上枚举常量是int类型的
2.定义
//定义枚举类型,枚举列表中的常量被指定为整数值0,1,2,,,,,,,。因此下面的winter = 3;
enum Season {
spring,
summer,
sutum,
winter
};
//同时也可以指定值,再次默认情况下winter的值等于 16.
enum Season {
spring = 5,
summer = 10,
sutum = 15,
winter
};
//定义枚举变量
enum Season s = summer;
C.数据类型总结
D.宏定义、条件编译、typedef、递归
1.不带参数的宏定义
2.带参数的宏定义
3.条件编译
//#if define(A)。这里面的A必须是外面的宏定义才行,就像这样#define A 5。这个的意思就是A已经被定义了。
4.递归运用
a.数据的定义是按递归定义的。(Fibonacci函数)问题解法按递归算法实现。
b.这类问题虽则本身没有明显的递归结构,但用递归求解比迭代求解更简单,如Hanoi问题。
数据的结构形式是按递归定义的。如二叉树、广义表等,由于结构本身固有的递归特性,则它们的操作可递归地描述。
c.递归的缺点:
递归算法解题相对常用的算法如普通循环等,运行效率较低。因此,应该尽量避免使用递归,除非没有更好的算法或者某种特定情况,递归更为适合的时候。在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。
d.设计一个函数,用来计算b的n次方。
- 黑马程序员 -- C语言 结构体 预编译
- 黑马程序员--C语言自学笔记---13结构体、预编译、宏、条件编译
- 黑马程序员---C语言结构体
- 13、黑马程序员-C语言结构体
- [黑马程序员][C语言]结构体
- 黑马程序员 C语言基础:结构体
- 黑马程序员--c语言结构体介绍
- 黑马程序员----- c语言结构体
- 黑马程序员--学习C语言结构体
- [黑马程序员]C语言结构体
- 【黑马程序员】C语言结构体
- 【黑马程序员】C语言基础-结构体
- 黑马程序员-C语言-结构体
- 黑马程序员-C语言-结构体
- c语言 include 预编译 结构体快捷命名 typedefine
- 黑马程序员-C语言学习日记(五)预编译、类型定义及static
- 黑马程序员—C语言_结构体、枚举
- 黑马程序员 C语言------结构体 枚举学习
- 509B、C(贪心)
- 位移操作的另类情况
- WSDL 文件的说明
- 微信在校生实习面试小记(iOS端)
- Perl 判断字符串为空
- 黑马程序员 -- C语言 结构体 预编译
- 我在Pointers on C 的错误点——1
- AjaxPage类使用说明
- C#中常用的几种排序算法
- 带下划线的变量名ios学习笔记
- 【凯子哥带你夯实应用层】读 Develop API Guides 有感(一)
- ios 后台运行
- Linux 网桥模式下使用netfilter
- UIButton的titleEdgeInsets和imageEdgeInsets属性