本文代码仓库地址: gitee码云CSDN笔记仓库地址
学习 指针02
#include <iostream>
using namespace std;
/// <summary>
/// 两个参数交换
/// </summary>
/// <param name="p1">参数1</param>
/// <param name="p2">参数2</param>
void Fun01(int* p1, int* p2);
/// <summary>
/// 冒泡排序【升序】
/// </summary>
/// <param name="arr">数组</param>
/// <param name="len">数组长度</param>
void BubbleSort(int* arr, int len);
/// <summary>
/// 打印数组
/// </summary>
/// <param name="arr">数组</param>
/// <param name="len">数组长度</param>
void PrintArr(int* arr, int len);
int main() {
int arr[]{ 1,2,3,99,5,6,66,8,15,10 };
cout << "arr 数组中第一个元素值:" << arr[0] << endl;
// 指针和数组
// 指针直接指向 arr 是指向数组的首地址,也就是第一个元素地址
int* p1 = arr;
cout << "利用指针 p1 指向 arr 访问的元素值:" << *p1 << endl;
cout << endl;
// 让指针向后偏移4个字节
p1++;
// 这个时候 p1 指向的地址是指向第二个元素
cout << "此时指针 p1 指向 arr 访问的元素值:" << *p1 << endl;
cout << endl;
int* p2 = arr;
// 利用指针遍历出数组中的10个元素
for (int i = 0; i < 10; i++)
{
cout << "数组中第" << i + 1 << "个元素值:" << *p2 << endl;
p2++;
}
cout << endl;
// 指针和函数
int a = 11;
int b = 22;
Fun01(&a, &b);
// 像这样直接修改了原地址中的值;函数中不是指针进行操作,只是修改了临时变量,不会对main方法中的 a和b 进行修改
cout << "经过 fun01() 交换后的a = " << a << endl;
cout << "经过 fun01() 交换后的b = " << b << endl;
// 指针、数组、函数的组合Demo
int len = sizeof(arr) / sizeof(arr[0]);
cout << "排序前的";
PrintArr(arr, len);
BubbleSort(arr, len);
cout << "排序后的";
PrintArr(arr, len);
cout << endl;
system("pause");
return 0;
}
void Fun01(int* p1, int* p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
void BubbleSort(int* arr, int len) {
for (int i = 1; i < len; i++)
{
for (int j = 0; j < len - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void PrintArr(int* arr, int len) {
cout << "数组为:";
for (int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
cout << endl;
}
学习 结构体(类)
#include <iostream>
using namespace std;
// 结构体:结构体属于用户自定义的数据类型
// 语法:struct 类型名称{ 成员列表 }
struct Student_xy
{
string name;
int age = 0;
int score = 0;
};
struct teacher_xy
{
int id = 0;
string name;
int age = 0;
Student_xy stu;
};
/// <summary>
/// 打印学生类数组
/// </summary>
/// <param name="arr">数组</param>
/// <param name="len">数组长度</param>
void PrintArr(Student_xy* arr, int len);
/// <summary>
/// 打印学生类数组【const使用的场景】
/// </summary>
/// <param name="arr">数组</param>
/// <param name="len">数组长度</param>
void PrintArr02(const Student_xy* s1);
int main() {
// 类似等于 int i;
Student_xy s1;
s1.name = "小印01";
s1.age = 22;
s1.score = 88;
cout << "姓名:" << s1.name << " 年龄:" << s1.age << " 分数:" << s1.score << endl;
Student_xy s2 = { "小印02", 23, 99 };
cout << "姓名:" << s2.name << " 年龄:" << s2.age << " 分数:" << s2.score << endl;
cout << endl;
// 结构体数组
Student_xy stuArr[3] = {
{"小印03", 20, 100},
{"小印04", 21, 90},
{"小印05", 22, 80}
};
// 结构体数组的长度
int len = sizeof(stuArr) / sizeof(stuArr[0]);
PrintArr(stuArr, len);
// 结构体指针
Student_xy* p1 = &s1;
// 重要的事情说三遍
// 想用指针访问结构体中的成员需要使用 -> 来访问
// 想用指针访问结构体中的成员需要使用 -> 来访问
// 想用指针访问结构体中的成员需要使用 -> 来访问
cout << "姓名:" << p1->name << " 年龄:" << p1->age << " 分数:" << p1->score << endl;
// 结构体嵌套结构体
teacher_xy tea1;
tea1.id = 001;
tea1.name = "老师001";
tea1.age = 26;
tea1.stu = s1;
cout << "老师编号:" << tea1.id << " 老师姓名:" << tea1.name << " 老师年龄:" << tea1.age << endl;
cout << "学生姓名:" << tea1.stu.name << " 学生年龄:" << tea1.stu.age << " 学生分数:" << tea1.stu.score << endl;
cout << endl;
// 结构体中 const 的使用场景
PrintArr02(&s1);
cout << endl;
system("pause");
return 0;
}
void PrintArr(Student_xy* arr, int len) {
cout << "数组为:" << endl;
for (int i = 0; i < len; i++)
{
cout << "姓名:" << arr[i].name << " 年龄:" << arr[i].age << " 分数:" << arr[i].score << endl;
}
cout << endl;
}
void PrintArr02(const Student_xy* s) {
// 当加上 const 后,原地址中的内容都不会被改变,有改变的代码会报错,去掉 const 就可以修改
// 传地址过来,还不让修改值,是因为当数据比较多的时候,传地址的效率会比传值的效率高,32中指针内存只占4个字节,值就不一定了
// s1->name = "我改名了";
cout << "我是PrintArr02中的打印:姓名:" << s->name << " 年龄:" << s->age << " 分数:" << s->score << endl;
}
附加内容(仓库不包含此内容)
#include <iostream>
using namespace std;
// 宏常量【不要习惯性的在后面加上 ; 】
#define Max 10
// 宏定义使用#undef符号终止宏定义的作用域。
int main() {
cout << Max << endl;
system("pause");
// 清屏
system("cls");
cout << "我是清屏之后的哦!" << endl;
// 三步运算符【如果 Max==10输出正确,否则输出否则 】
cout << (Max == 10 ? "正确输出" : "否则输出") << endl;
cout << (Max == 101 ? "正确输出" : "否则输出") << endl;
cout << endl;
system("pause");
return 0;
}
一点点笔记,以便以后翻阅。