const修饰指针------常量指针。可以改指针指向,不可改指针指向的内存。举例说明
#include <iostream> // 包含标准输入输出流库
using namespace std; // 使用标准命名空间
int main()
{
int a = 1; // 定义一个整数变量a,并初始化为1
int b = 2; // 定义一个整数变量b,并初始化为2
const int* p = &a; // 定义一个指向常量的指针p,并将其指向变量a的地址
// *p = 20; // 不可以,语法错误。p指向的是常量,不能通过p修改它所指向的值
// 但变量a本身可以被修改,例如:a = 20;
// 指针p的指向也可以被修改,例如:p = &b;
// 输出指针p的内容(即a的值)和指针p的地址
cout << "*p" << '\t'; // 输出字符串"*p",表示指针p的内容
cout << *p << endl; // 输出指针p所指向的值(即a的值)
cout << p << endl; // 输出指针p的地址(即a的地址)
// 输出变量a的内容和地址
cout << "a" << '\t'; // 输出字符串"a",表示变量a的值
cout << a << endl; // 输出变量a的值
cout << &a << endl; // 输出变量a的地址
// 修改指针p的指向,使其指向变量b的地址
p = &b;
// 输出指针p的内容(即b的值)和指针p的地址
cout << "*p" << '\t'; // 输出字符串"*p",表示指针p的内容
cout << *p << endl; // 输出指针p所指向的值(即b的值)
cout << p << endl; // 输出指针p的地址(即b的地址)
// 输出变量a和b的内容
cout << "a" << '\t'; // 输出字符串"a",表示变量a的值
cout << a << endl; // 输出变量a的值
cout << "b" << '\t'; // 输出字符串"b",表示变量b的值
cout << b << endl; // 输出变量b的值
cin.get(); // 等待用户输入,防止程序直接退出
return 0; // 返回0,表示程序正常结束
}
const修饰常量------指针常量。不可以改指针指向,可以改指针指向的内存。举例说明
#include <iostream> // 包含标准输入输出流库
using namespace std; // 使用标准命名空间
int main()
{
int a = 1; // 定义一个整数变量a,并初始化为1
int b = 2; // 定义一个整数变量b,并初始化为2
int* const p = &a; // 定义一个指针常量p,指向变量a的地址
// p的指向固定,不能更改(例如:p = &b; 是非法的)
// 但可以通过p修改它所指向的值(例如:*p = 20; 是合法的)
// 输出指针p的内容(即a的值)和指针p的地址
cout << "*p" << '\t'; // 输出字符串"*p",表示指针p的内容
cout << *p << endl; // 输出指针p所指向的值(即a的值)
cout << p << endl; // 输出指针p的地址(即a的地址)
// 输出变量a的内容和地址
cout << "a" << '\t'; // 输出字符串"a",表示变量a的值
cout << a << endl; // 输出变量a的值
cout << &a << endl; // 输出变量a的地址
// 通过指针p修改a的值
*p = 20; // 合法操作,因为p是一个指针常量,指向的内容可以被修改
// 此时a的值被修改为20
// 以下代码是非法的,因为p是一个指针常量,其指向不能被更改
// p = &b; // 错误:不能更改指针常量的指向
// 再次输出指针p的内容(即a的值)和指针p的地址
cout << "*p" << '\t'; // 输出字符串"*p",表示指针p的内容
cout << *p << endl; // 输出指针p所指向的值(此时a的值已被修改为20)
cout << p << endl; // 输出指针p的地址(即a的地址)
// 输出变量a和b的内容
cout << "a" << '\t'; // 输出字符串"a",表示变量a的值
cout << a << endl; // 输出变量a的值(此时a的值为20)
cout << "b" << '\t'; // 输出字符串"b",表示变量b的值
cout << b << endl; // 输出变量b的值(b的值未被修改,仍为2)
cin.get(); // 等待用户输入,防止程序直接退出
return 0; // 返回0,表示程序正常结束
}
两个都修饰 const 指针数据类型 const 变量 不可以改指针指向,不可以改指针指向的内存。举例说明。
#include <iostream> // 包含标准输入输出流库
using namespace std; // 使用标准命名空间
int main()
{
int a = 1; // 定义一个整数变量a,并初始化为1
int b = 2; // 定义一个整数变量b,并初始化为2
const int* const p = &a; // 定义一个指向常量的常量指针p,并将其指向变量a的地址
// 特点:
// 1. p指向的内容不能被修改(即不能通过*p修改a的值)。
// 2. p的指向也不能被修改(即不能写p = &b;)。
// 输出指针p的内容(即a的值)和指针p的地址
cout << "*p" << '\t'; // 输出字符串"*p",表示指针p的内容
cout << *p << endl; // 输出指针p所指向的值(即a的值)
cout << p << endl; // 输出指针p的地址(即a的地址)
// 输出变量a的内容和地址
cout << "a" << '\t'; // 输出字符串"a",表示变量a的值
cout << a << endl; // 输出变量a的值
cout << &a << endl; // 输出变量a的地址
// 以下操作是非法的:
// *p = 20; // 错误:p指向的是常量,不能通过*p修改a的值
// p = &b; // 错误:p是一个常量指针,其指向不能被更改
// 再次输出指针p的内容和地址
cout << "*p" << '\t'; // 输出字符串"*p",表示指针p的内容
cout << *p << endl; // 输出指针p所指向的值(仍然是a的值)
cout << p << endl; // 输出指针p的地址(仍然是a的地址)
// 输出变量a和b的内容
cout << "a" << '\t'; // 输出字符串"a",表示变量a的值
cout << a << endl; // 输出变量a的值
cout << "b" << '\t'; // 输出字符串"b",表示变量b的值
cout << b << endl; // 输出变量b的值
cin.get(); // 等待用户输入,防止程序直接退出
return 0; // 返回0,表示程序正常结束
}