做网站app 需要多少钱,wordpress分录信息主题,中国建筑网官网新闻,深圳做微商网站公司c基础学习第三天#xff08;指针#xff0c;结构体#xff09; 文章目录 1、指针1.1、指针的基本概念1.2、指针变量的定义和使用1.3、 指针所占内存空间1.4、空指针和野指针1.5、 const修饰指针1.5.1、const修饰指针-常量指针1.5.2、const修饰常量-指针常量1.5.3、const即修… c基础学习第三天指针结构体 文章目录 1、指针1.1、指针的基本概念1.2、指针变量的定义和使用1.3、 指针所占内存空间1.4、空指针和野指针1.5、 const修饰指针1.5.1、const修饰指针-常量指针1.5.2、const修饰常量-指针常量1.5.3、const即修饰指针又修饰常量 2、结构体2.1、结构体基本概念2.2、结构体定义和使用2.3、结构体数组2.4、结构体指针2.5、结构体嵌套结构体2.6、结构体做函数参数2.7、结构体中const使用场景 1、指针
1.1、指针的基本概念
指针的作用可以通过指针间接访问内存
内存编号是从0开始记录的一般用十六进制数字表示可以利用指针变量保存地址
1.2、指针变量的定义和使用
指针变量定义语法*数据类型 变量名
//1、定义指针
int a1 10;
// 指针定义的语法数据类型 * 指针变量名
int *p;
// 让指针记录变量a的地址
p a1;
cout a的地址为 a1 endl;
cout 指针p为 p endl;
//2、使用指针
//可以通过解引用的方式来找到指针指向的内存,查看内存内容。
//指针前加 * 代表解引用找到指针指向的内存中的数据
*p 1000;
cout a1 a1 endl;
cout *p *p endl;1.3、 指针所占内存空间
提问指针也是种数据类型那么这种数据类型占用多少内存空间 在32位操作系统下占用4个字节空间64位下占8个字节。不管是什么数据类型 //指针所占内存空间
int a2 10;
//int p;
//pa:
int *p1 a2;
//在32位操作系统下指针是占4个字节空间大小***不管是什么数据类型***
//在64位操作系统下指针是占8个字节空间大小
cout sizeof(int*) sizeof(int*) endl;
cout sizeof (float*) sizeof(float*) endl;
cout sizeof (double*) sizeof(double*) endl;
cout sizeof(char*) sizeof(char*) endl;1.4、空指针和野指针
空指针指针变量指向内存中编号为0的空间 用途初始化指针变量 注意空指针指向的内存是不可以访问的
空指针
//1、空指针用于给指针变量进行初始化
int *p4 NULL;
// 2、空指针(0号内存空间)是不可以进行访问的
//0~255之间的内存编号是系统占用的因此不可以访问
//*p 100;野指针指针变量指向非法的内存空间(不是自己申请的内存空间)
/野指针
//在程序中尽量避免出现野指针
int *p (int*)0x1100;
cout * p endl;总结空指针和野指针都不是我们申请的空间因此不要访问。
1.5、 const修饰指针
const修饰指针有三种情况
1.5.1、const修饰指针-常量指针 const int *pa: 常量指针 特点指针的指向可以修改但是指针指向的值不可以改 *p20;错误指针指向的值不可以改 pb;正确指针指向可以改
1.5.2、const修饰常量-指针常量 int * const pa: 指针常量 特点指针的指向不可以改指针指向的值可以改 *p20;正确指向的值可以改 pb;错误指针指句不可以改
1.5.3、const即修饰指针又修饰常量 const int * const p a; 特点指针的指向和指针指向的值都不可以改 *p20;/错误 pb;/错误
//1、const修饰指针 常量(const)指针(*)
int a4 10;
int b4 10;
const int * p7 a4;
//指针指向的值(*P)不可以改指针的指向(p)可以改
//*p20:错误
p7 b4;//正确//2、const修饰常量 指针(*)常量(const)
//指针的指向(p2)不可以改指针指向的值(*p2)可以改
int * const p5 a4;
*p5 100; // 正确的
//p2b:/错误指针的指向不可以改// 3、const修饰指针和常量
const int * const p6 a4;
//指针的指向和指针指向的值都不可以改
//*p3100;//错误
//b3 b; //错误2、结构体
2.1、结构体基本概念
结构体属于用户自定义的数据类型允许用户存储不同的数据类型
2.2、结构体定义和使用
语法struct 结构体名 {结构体成员列表}; 通过结构体创建变最的方式有三种
struct 结构体名 变量名struct 结构体名 变量名{成员1值成员2值…}定义结构体时便创建变星
通过学生类型创建具体学生
//2.1 struct Student sl
struct Student s1;
//给s1属性赋值通过.访问结构体变量中的属性
s1.name 张三;
s1.age 18;
s1.score 100;
cout 姓名 s1.name 年龄 s1.age 分数 s1.score endl;//2.2 struct Student s2 {..};
struct Student s2 { 李四,19,80 };
cout 姓名 s2.name 年龄 s2.age 分数 s2.score endl;//2.3在定义结构体时顺便创建结构体变量
struct Student1 {//成员列表// 姓名string name;// 年龄int age;//分数int score;
}s3;s3.name 王五;
s3.age 20;
s3.score 60;
cout 姓名 s3.name 年龄 s3.age 分数 s3.score endl;struct关键字可以省略(创建变量时)定义时struct关键字不可以省略。 总结1定义结构体时的关键字是struct,不可省略 总结2创建结构体变是时关键字structi可以省略 总结3结构体变量利用操作符.访门成员 2.3、结构体数组
作用将自定义的结构体放入到数组中方便维护 语法struct 结构体名 数组名[元素个数]{{}{}·{}};
//1、创建结构体数组
struct Student stuArray[3]{{张三,18,100},{李四,28, 99},{ 王五,38,66}
};
// 2、给结构体数组中的元素赋值
stuArray[2].name 赵六;
stuArray[2].age 80;
stuArray[2].score 60;
// 3、遍历结构体数组
for (int i 0; i 3; i) {cout 姓名stuArray[i].name年龄stuArray[i].age 分数 stuArray[i].score endl;
}2.4、结构体指针
作用通过指针访问结构体中的成员 利用操作符-可以通过结构体指针访问结构体属性
//1、创建学生结构体变量
struct Student s { 张三,18,100};
//2、通过指针指向结构体变量
struct Student *p s;
//3、通过指针访问结构体变量中的数据
cout 姓名 p-name 年龄 p-age 分数 p-score endl;2.5、结构体嵌套结构体
作用结构体中的成员可以是另一个结构体 例如每个老师辅导一个学员一个老师的结构体中记录一个学生的结构体
//定义学生结构体
struct student{string name; // 姓名int age;//年龄int score; // 分数
};//定义老师结构体
struct teacher {int id;//教师编号string name; // 教师姓名int age;//年龄struct student stu;//辅导的学生
};//结构体嵌套结构体
//创建老师
struct teacher t;
t.id 10000;
t.name 老王;
t.age 50;
t.stu.name 小王;
t.stu.age 20;
t.stu.score 60;
cout 老师姓名 t.name 老师编号 t.id 老师年龄 t.age 老师辅导的学生姓名 t.stu.name 学生年龄 t.stu.age 学生考试分数为 t.stu.scoreendl;2.6、结构体做函数参数
作用将结构体作为参数向函数中传递 传递方式有两种
值传递地址传递
总结如果不想修改主函数中的数据用值传递反之用地址传递
2.7、结构体中const使用场景
作用用const来防止误操作 将函数中的形参改为指针可以减少内存空间而且不会复制新的副本出来 void printStudents(const student *s)防止函数修改属性值 指针地址传递节省空间值传递会复制一份给函数内的变量。