本案例代码非原创 , 我只是按照学习的过程自己重敲一遍回顾学习!
2.结构体介绍
#include <iostream>
// 创建一个结构体:
struct Student {
int no;
char name[20];
int *age;
// 初始化结构体:
Student() {
no = 114;
// 数组赋值:stringCopy , 给name属性赋值 "Snow":
strcpy(name, "Snow"); // 数组的一种赋值方式:
// 用 new 关键字开辟一块 int类型的 内存空间给 age 这个结构体成员 , 分配int型空间,放入内容为数字20,并将首地址给指针age:
age = new int(20);
}
};
/**
* 1.定义一个Student1结构体 (只有结构体名称)
*
*/
struct Student1:Student{
};
/**
* 2.定义一个结构体变量stu2 (只有底部的 `结构体变量` 名称)
*
*/
struct:Student{
}stu2;
/**
* 3.定义一个Student3结构体和一个结构体变量stu3 (有顶部的结构体名称 , 也有底部的结构体变量名称)
*
*/
struct Student3:Student{
}stu3;
/**
* 定义一个 继承自 Student 结构体 结构体名称为 Student4 的结构体,并给它取个别名叫 `Stu4`
* Stu4这个结构体 就代表了 `struct Student4`这个结构体
*/
typedef struct Student4:Student{
}Stu4;
int main(int argc, const char * argv[]) {
/**
* 访问结构体
*
*/
//1.第一种
printf("第一种\n");
struct Student1 stu1;
// 取数值:
printf("stu1.no: %d\n",stu1.no);
// 指针偏移 , 数组是在内存中一段连续开辟的内存空间:
// 取数组中的值:用指针取值 , 拿到的是第一个字符串 l 的指针位置 , 然后用 * 号取值:
printf("sut1.name: %c %c %c %c %c \n",*(stu1.name) , *(stu1.name+1) , *(stu1.name+2) , *(stu1.name+3) , *(stu1.name+4));
printf("stu1.age: %d\n",*(stu1.age));
//2.第二种
printf("第二种\n");
// 用结构体变量名直接取值 , 如果是第一种结构体名称还需要创建结构体变量才能取值 , 第二种是直接就有结构体变量名称取值!
printf("stu2.no: %d\n",stu2.no);
//3.第三种 (结构体名称 , 结构体变量名称都有 , 就可以综合第一种第二种两种方法取值)
printf("第三种\n");
struct Student3 stu33;
// 类似第一种用自己新创建的结构体变量取值:
printf("stu33.no: %d\n",stu33.no);
// 类似第二种用结构体变量取值:
printf("stu3.no: %d\n",stu3.no);
//4.第四种
// 直接用别名代替 `struct Student4`:
Stu4 stu4;
// 类似第一种创建方式:
struct Student4 stu44;
printf("stu4.no: %d\n",stu4.no);
printf("stu44.no: %d\n",stu44.no);
/**
*结构体指针
*/
Stu4 *pStu4 = &stu4;
printf("pStu4->no: %d\n",pStu4->no);
/**
*结构体位域 8位=1字节 4-->00000100
*/
struct Tutor{
// 创建一个成员a , 占用 `1位`:
unsigned int a:1;
// 创建一个成员b , 占用 `2位`:
unsigned int b:2;
// 创建一个成员c , 占用 `3位`:
unsigned int c:3;
} tc , *ptc; // 这里定义了两个变量 , 一个是结构体变量tc , 一个是结构体指针变量ptc , 这个ptc只是一个Tutor类型的结构体指针还没有被赋值 !
// int类型占用四字节 , Tutor这个结构体三个成员虽然只占用了1 , 2 , 3 一共 `6位` 但是为了内存空间对齐 , 也会给他分配至少 `4个字节` 的内存空间:
printf("%lu\n",sizeof(Tutor)); //打印结果为4字节
// 给ptc赋 tc de 地址值:
ptc = &tc;
// 通过结构体指针给结构体成员赋新值:
ptc->a = 1; //1
// 注意 , 这里不能赋值超过3的数字, 因为 4 是0000 0100 已经占用了3位了 , 这跟结构体创建成员b时候给了 `2字节` 的限制就相左了!!
ptc->b = 3; //11
ptc->c = 5; //101 最大长度111=7
printf("Tutor->a: %u\n",ptc->a);
printf("Tutor->b: %u\n",ptc->b);
printf("Tutor->c: %u\n",ptc->c);
return 0;
}
网友评论