const和指针

本文通过示例代码详细解释了常量指针与指针常量的概念及用法,包括如何声明和使用这些类型的指针,并展示了它们在实际编程中的应用。
type * const variable; //指针的值不可以变
const type * variable;
type const * variable; //varaible指向的值不可以变

#include int main()
{ 
	const int n =9; int a[n]; //在c中定义的n是常量,可以这么定义数组
	int jane=0, hosfore=1;
	int const *p =&jane; //p是指向常量对象的指针 
	//*p = 100; //值不可以变
	printf("\n%d\n", *p); 
	p=&hosfore; //地址可以变,指向新的常量对象
	printf("\n%d\n", *p);
	int* const love =&jane; //love是指向对象的常量指针
	printf("\n%d\n", *love); 
	//love=&hosfore; //地址不可变
	*love =100; //对象的值可以变
	printf("\n%d\n", *love); return 0;
}

### C++ 中 `const` 修饰指针的用法与规则 在 C++ 中,`const` 修饰符可以作用于指针的不同部分,从而控制指针本身的可变性以及指针所指向的内容是否允许被修改。以下是详细的说明示例: --- #### 1. **仅修饰指针指向的内容** 当 `const` 修饰指针指向的内容时,意味着指针指向的值不能被修改,但指针本身可以重新指向其他变量。 语法: ```cpp const 数据类型 *指针名; // 或者 数据类型 const *指针名; ``` 示例: ```cpp #include <iostream> using namespace std; int main() { int a = 10, b = 20; const int* p = &a; // 指向常量的指针 // 修改指针指向的内容 -> 不合法 //*p = 30; // 错误:无法修改指针指向的内容 // 改变指针指向 -> 合法 p = &b; // 正确:可以改变指针指向的位置 cout << "*p: " << *p << endl; // 输出 *p 的值 return 0; } ``` 在这种情况下,`const` 表明指针指向的内容是只读的,任何尝试修改指针指向内容的行为都会导致编译错误[^1]。 --- #### 2. **仅修饰指针本身** 当 `const` 修饰指针本身时,表明指针的地址不可更改,但它指向的内容是可以修改的。 语法: ```cpp 数据类型 * const 指针名; ``` 示例: ```cpp #include <iostream> using namespace std; int main() { int a = 10, b = 20; int* const p = &a; // 常量指针 // 修改指针指向的内容 -> 合法 *p = 30; // 正确:可以修改指针指向的内容 // 改变指针指向 -> 不合法 //p = &b; // 错误:指针本身是一个常量,不能改变它的指向 cout << "*p: " << *p << endl; // 输出 *p 的值 return 0; } ``` 这里,`const` 表明指针本身是一个常量,其存储的地址值在整个生命周期内固定不变[^3]。 --- #### 3. **同时修饰指针指针指向的内容** 当 `const` 同时修饰指针指针指向的内容时,这意味着指针本身它指向的内容都不能被修改。 语法: ```cpp const 数据类型 * const 指针名; // 或者 数据类型 const * const 指针名; ``` 示例: ```cpp #include <iostream> using namespace std; int main() { int a = 10, b = 20; const int* const p = &a; // 常量指针指向常量 // 修改指针指向的内容 -> 不合法 //*p = 30; // 错误:无法修改指针指向的内容 // 改变指针指向 -> 不合法 //p = &b; // 错误:指针本身是一个常量,不能改变它的指向 cout << "*p: " << *p << endl; // 输出 *p 的值 return 0; } ``` 在此模式下,`const` 控制了两个方面:指针指向的内容不可修改,指针自身的地址也不可修改[^5]。 --- #### 4. 判断规则总结 为了区分到底是“指针指向的内存空间不能改变”,还是“指针指向的内存空间中的数值不能改变”,可以根据以下原则判断: - 如果 `const` 出现在 `*` 符号之前,则表示指针指向的内容为常量。 - 如果 `const` 出现在 `*` 符号之后,则表示指针本身为常量。 例如: ```cpp const int* p = &a; // 指针指向的内容为常量 int* const p = &a; // 指针本身为常量 const int* const p = &a; // 指针指向的内容均为常量 ``` 这一规则可以帮助开发者快速理解代码中 `const` 的含义[^4]。 --- ### 总结 C++ 中 `const` 修饰指针有三种主要形式: 1. 仅修饰指针指向的内容(`const T* ptr`),此时指针指向的内容不可修改,但指针本身可以重定向。 2. 仅修饰指针本身(`T* const ptr`),此时指针本身不可重定向,但指针指向的内容可以修改。 3. 同时修饰两者(`const T* const ptr`),此时指针本身指向的内容均不可修改。 这些规则能够帮助程序员更好地控制程序行为,增强代码的安全性健壮性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值