C++ 基础【04】

本文代码仓库地址: 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;
}

一点点笔记,以便以后翻阅。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小印丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值