从C到C++

const关键字用法

(1)定义常量

#include <iostream>
using namespace std;
int main() {
	const int MAX_VAL = 23;
	const double Pi = 3.14;
	const char* SHOOL_NAME = "SDWU";
	return 0;
}

(2)定义常量指针

不可以通过常量指针修改指向的内容.

#include <iostream>
using namespace std;
int main() {
	int n = 10, m = 20;
	const int*p = &n;
//	*p = 30;编译出错
	n = 30;//可以通过原本的变量名来修改
	p = &m; //常量指针的内容可以变化.
	return 0;
}

不能把常量指针赋值给非常量指针,反过来可以

#include <iostream>
using namespace std;
int main() {
	int n = 10, m = 20;
	const int*p1 = &n;
	int*p2 = &m;
	p1 = p2;
//	p2 = p1;编译不过,不能随便将const类型的指针赋值给非const类型
	p2 = (int*)p1;//但是进行了强制类型转换就可以了

	return 0;
}

函数参数为常量指针时,可以避免函数内部不小心改变参数指针所指地方的内容

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
void My_print(const char*p) {
//	strcpy(p, "abc");编译出错
	printf("%s", p);
}
int main() {
	//不能随便将const char*随便赋值给char*
	const char*p = "SDWU";
	My_print(p);
	return 0;
}

(3)定义常引用

不能通过常引用修改其引用的变量

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main() {
	int n = 10;
	const int &r = n;
//	r=20;编译不过
	n = 30;
	cout << r << '\n';
	return 0;
}

内存的动态分配

使用new运算符实现内存的动态分配

image-20240516201003503

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main() {
	int *p;
	//返回值为int*类型
	p = new int;
	*p = 5;
	cout << *p << '\n';
	return 0;
}

image-20240516201247960

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main() {
	int* p;
	int i = 5;
	p = new int[i * 20];
	p[0] = 55;
	p[100] = 30; //数组越界
	cout << p[100] << '\n';
	return 0;
}

使用delete运算符释放动态内存空间

image-20240516201842920

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main() {
	int* p = new int;
	*p = 30;
	delete p;
//	delete p;释放第二次程序崩溃
	//一片空间不能被delete两次
	return 0;
}

image-20240516202101197

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main() {
	int* p = new int[10];
	p[0] = 1;
	delete[]p;
//必须前面加括号才能动态分配的元素释放干净
	return 0;
}
posted @ 2024-05-16 20:24  harper886  阅读(3)  评论(0编辑  收藏  举报