指针常量
其实,我们常见的数组就是一个指针常量,指针常量表示指向的内存地址一旦初始化后就不可更改,但是其地址指向的值可以更改。
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <ctime>
using namespace std;
int main() {
system("chcp 65001");
int b[3] = {1, 2, 3};
int *const a = b;
cout << "b[0]指向的内存地址:" << &b[0] << endl;
cout << "a指向的内存地址:" << a << endl;
cout << "赋值前的a指向的值:" << *a << endl;
*a = b[1];
cout << "赋值后的a指向的值:" << *a << endl;
return 0;
}
输出:
Active code page: 65001
b[0]指向的内存地址:0x63fe0c
a指向的内存地址:0x63fe0c
赋值前的a指向的值:1
赋值后的a指向的值:2
常量指针
常量指针指向的地址可以改变,但是其值不可以改变,值的改变只能通过修改指向的地址后改变。
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
system("chcp 65001");
int b = 1;
int c = 2;
const int *a = &b;
cout << "a初始化指向的内存地址:" << a << endl;
cout << "a初始化的值:" << *a << endl;
a = &c;
cout << "a重新指向的内存地址:" << a << endl;
cout << "a重新指向内存地址后的值:" << *a << endl;
return 0;
}
输出:
Active code page: 65001
a初始化指向的内存地址:0x63fe14
a初始化的值:1
a重新指向的内存地址:0x63fe10
a重新指向内存地址后的值:2
指向常量的常量指针
指向常量的常量指针形式为const char *const p = &x; 此初始化之后,其值其地址均不可改变
区分指针常量和常量指针的口诀:
指针和 const(常量) 谁在前先读谁 ;*象征着地址,const象征着内容;谁在前面谁就不允许改变。
使用const的好处
在C/C++中关键字const用来定义一个只读的变量或者对象,有如下优点:
(1)便于类型检查,如函数的函数 fun(const int a) a的值不允许变,这样便于保护实参。 (2)功能类似与宏定义,方便参数的修改和调整。如 const int max = 100; (3)节省空间,如果再定义a = max,b=max。。。就不用在为max分配空间了,而用宏定义的话就一直进行宏替换并为变量分配空间 (4)为函数重载提供参考
|