——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——
构造类型:由基本数据类型组成 (int、float、double、char)
数组 :只能用多个相同类型的数据结构构成
结构体 :可以有多个不同类型的数据构成
声明、
// 1.第一结构体类型
struct Person
{
int age; // 年龄
double height; // 身高
char *name; // 姓名
};
// 2.根据结构体类型,定义结构体变量
struct Person p = {21, 1.80, "sun"}; // 这种赋值方法只能用在初始化的时候!
赋值、
p.age = 30; // 一般赋值方法
struct Person *pp = &p; // 结构体指针的赋值方法
pp->age = 20;
struct Person p = {.name="sun", .height=1.80, .age=21}; // 这样的赋值方法也非常方便,可以打乱顺序赋值
struct Person d2 = {23,1.70,"bo"};
d2 = p; // 同类型的结构体可以直接赋值 ,
// 这样一来结构体内的三个值都会被改变了
内存分析、
// 1定义结构体类型(并不会分配存储空间
struct Date
{
int year;
int month;
int day;
};
// 2.定义结构体变量(真正分配存储空间
struct Date d1 = {2015, 3, 5};
毫无疑问,分配给d1的内存空间大小为12字节.
那接下来再看这个结构体的大小是多少呢?
struct Student
{
int age; // 4字节
char *name; //8个字节
};
实际上这个结构体所分配的空间是16字节而不是12字节
这因为结构体所占用的存储空间 必须是 最大成员字节的倍数
这就是所谓的内存对齐,是因为计算机原理的一些特性所决定的.
结构体的定义方式、
除了上面我们定义结构体的方法外还有其他的方法.
1>
struct Student // 1.定义结构体类型
{
int age;
double height;
char *name;
} stu; // 2.定义类型的同时来定义结构体变量
struct Student stu2;
stu.age = 0;
stu2.age = 2;
2>
struct { //1. 定义了结构体的类型
int age; // `
char *name; // `
}stu; //2.用这个类型定义一个变量
stu.age = 0; //然后就可以直接使用这个变量了
缺点:没有办法多次定义变量。只能使用一次。
没有办法用这个类型定义其他变量,因为缺少了类型的名称。
还有常用的typedef,细节记不清了。回头想起来再来补上吧