从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运算符实现内存的动态分配
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main() {
int *p;
//返回值为int*类型
p = new int;
*p = 5;
cout << *p << '\n';
return 0;
}
#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运算符释放动态内存空间
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main() {
int* p = new int;
*p = 30;
delete p;
// delete p;释放第二次程序崩溃
//一片空间不能被delete两次
return 0;
}
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int main() {
int* p = new int[10];
p[0] = 1;
delete[]p;
//必须前面加括号才能动态分配的元素释放干净
return 0;
}