C++精简基础(三)

长话短说之,C++精简基础三


前言

既然是精简基础,意思就是不会过分深入某个知识点,而是把这些知识点先浅浅带过,有个印象,等第二遍的时候再逐个击破。


一、结构体

C/C++ 数组允许定义可存储相同类型数据项的变量,但是结构是 C++ 中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。

#include <iostream>
using namespace std;

struct Position {
	float x;
	float y;
	float z;
};

struct Hero {
	string name;
	int hp;
	int attack;
	Position pos;
};

int main()
{
	//float playPositionX;
	//float playPositionY;
	//float playPositionZ;
	//Position PlayerPos = { 3,4,6.7 };
	Position PlayerPos{ 3,4,6.7 };
	//Position PlayerPos{ };
	cout << PlayerPos.x << PlayerPos.y << PlayerPos.z << endl;
	PlayerPos.y = 100;
	cout << PlayerPos.y << endl;


	Position enemyPos;

	Position enemysPos[]{ {1,1,1},{2,4,7},{},{6,4,5},{123,2,2} };
	cout << enemysPos[1].x << enemysPos[1].y << enemysPos[1].z << endl;

	return 0;
}

二、枚举类型

枚举类型的定义:枚举类型(enumeration)是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合。

#include <iostream>
using namespace std;

enum HeroType {//枚举类型,便于程序员看的时候见名知其意
	Tank = 1,
	Magic = 4,
	ADC = 7,
	Assist//下一个按照上一个更改的数字增长
};

int main()
{
	HeroType heroType = Tank;
	heroType = ADC;
	cout << heroType << endl;
	int i = ADC + 2;
	cout << i << endl;
	heroType = HeroType(3);
	cout << heroType << endl;
	cout << Assist << endl;

	return 0;
}

三、指针

3.1 指针初始化

通过指针,可以简化一些 C++ 编程任务的执行,还有一些任务,如动态内存分配,没有指针是无法执行的。

取得一个变量的内存地址:

#include <iostream>
using namespace std;
int main()
{
	int a = 10;
	float b = 9.7f;
	//&取得一个变量的内存地址
	cout << &a << endl;
	cout << &b << endl;
	//*从内存地址所对应的内存取得数据
	cout << *(&a) << endl;//获得这个地址存放的数据
	cout << a << endl;//上面是示例,一般都是直接调用这个变量
	//error:cout << *a << endl;
	
	return 0;
}

定义指针:

#include <iostream>
using namespace std;
int main()
{
	int a = 10;
	float b = 9.7f;
	//定义指针的时候使用*
	int* pa = &a;//&取地址
	float* pb = &b;

	cout << pa << endl;
	cout << pb << endl;

	cout << *pa << endl;
	cout << *pb << endl;

	int* p;
	p = pa;
	cout << *p << endl;
	cout << *pa << endl;
	*pa = 100;
	cout << a << " " << *pa << endl;
	*p = 300;
	cout << a << " " << *pa << " " << *p << endl;
	
	return 0;
}

好的编程习惯是给定义的指针一个空地址:

#include <iostream>
using namespace std;
int main()
{
	int* p1 = NULL;//好的编程习惯要么给个空的,要么给个地址
	//p1 = pa;
	//float* p2;
	//p2 = pb;
	int* p2 = 0;
	int* p3 = nullptr;//c++中的关键字nullptr
	cout << p1 << " " << p2 << " " << p3 << endl;

	void* p;//p可以接受任意类型的对值
	p = &a;
	//p = &b;
	cout << *((int*)p) << endl;
	
	return 0;
}

使用完new关键字创建指针后一定要记得delete释放内存:

#include <iostream>
using namespace std;
int main()
{
	int* p = new int;
	*p = 100;
	cout << *p << endl;
	delete p;//释放内存

	return 0;
}

3.2 指针和数组

我们还可以灵活运用指针来创建和控制数组

#include <iostream>
using namespace std;

int main()
{
    //int a[]{ 3,12,312,31,2312,3,12 };

    //cout << a << endl;
    //cout << *a << endl;
    //cout << *(a + 4) << endl;
    //
    //*(a + 1) = 1000;//设置下标为1的值变成1000
    //cout << a[1] << endl;//输出下标1的值,即1000

    int* p = new int[20];//new int用来开辟一块新的内存,后面跟[20]即为开辟一个大小为20大小的数组(这一块内存空间是连续的),把第一个内存空间的地址赋值给p
    p[0] = 90;
    cout << p[0] << endl;
    *(p + 2) = 80;
    cout << *(p + 2) << endl;
    //凡是new了一个数组一定记得要delete,有new就有delete。
    delete[] p;
    //指针这种方式要谨慎使用
    return 0;
}

四、数组的第三种创建方式

数组的第三种创建方式就是通过array头文件来实现数组的创建,它提供了一种固定大小的数组容器,与 C 语言中的数组相比,具有更好的类型安全和内存管理特性。

#include <iostream>
using namespace std;
#include <array>
int main()
{
	array<int, 9> a1 = { 2,12,31,23,123,12 };
	array<int, 9> a2;
	a2 = a1;//这种方法的好处是可以直接赋值
	cout << a1[4] << " " << a2[4] << endl;
	cout << a1[8] << " " << a2[8] << endl;

	return 0;
}

总结

精简基础到这里就告一段落

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值