黑马程序员 -- C语言 结构体 预编译

来源:互联网 发布:财新 数据新闻 编辑:程序博客网 时间:2024/06/05 18:16
------- android培训、.Net培训、IOS培训碧空海的技术博客,期待与您交流!----------

第六讲  结构体  预编译 

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次方。


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


0 0