int const*与int * const

本文深入解析了C++中intconst*, int*const和constint*const三种指针类型的使用特性,包括它们如何限制对数据的修改和重新赋值,以及在实际编程中的应用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. int const*

int const *p与const int *p意义一样。

从右往左看,进行解析,这个p是个指针,而且是个常量,类型是整型。可称为常量指针

特点:*p指向一个整型的常量,但是不能通过修改p所指向内存单元的值,只能修改所指向的对象,或者通过改该对象的值。
such as:

    int a = 10;
	int b = 20;
	int c = 55;
	int const *p = &a;
	const int *q = &b;     //与上面一样
	p=&c;						//可以通过,允许修改所指向的对象
	q=&a;
	*p=34;                  //不允许通过,无法通过该指针修改内容
	*q=123;				//同上 
	                  
	  p=q;					//可以通过

	 p=&a;					//重新指向a,通以修改a的值,修改p中的值
	 a=456;			

2. int * const p

从右往左看,一个常量p被定义为整型指针。可称为指针常量

特点:常量p是一个整型类型的指针,它能通过指针来进行修改其中的内容,但当它已经指向一个地址之后,便不能再指向其他地址,和int const*有区别

    int a = 10;
	int b = 20;
	int c = 55;
	int * const p = &a;
	int *const q = &b;
	*p=34;							//可以将p所指向的地址进行修改

	a=894;							//也可以通过修改a的值,使p的值进行更改

	p=&c;							//该操作不被允许,已经指向一个地址,无法指向其他地址
	
	p=q;								//该操作也不被允许,除非p还没进行初始化

3. const int* const p

从右往左看,结合上面两个,可以看做常量指针常量,即常量p是一个整型的指针,而且这个指针还是个常量

特点:结合上面两个,将两个都不能允许的操作,在这也全部不允许——不允许当p初始化后,再将p指向其他地址;不允许通过修改指针p的值

    int a = 10;
	int b = 20;
	int c = 55;
	const int* const p = &a;
	const int* const q = &b;
     
     *p=456;							//该操作不被允许
     p=&c;								//该操作不被允许
     
	a=333;								//允许该操作,进行修改值
	const int* const r=p;		//允许该操作

口诀:

  • 指针常量(int* const p):指针是常量,即指针指向不可变,指向数据可变
  • 常量指针(const int *p || int const *p): 指向常量,即指向数据不可变,指针指向可变化。
好的,让我们来详细了解一下 `int* const` 和 `int const *` 的区别。 ### 1. `int* const` `int* const` 表示一个指向整数的指针,并且这个**指针本身是一个常量**。这意味着你可以通过该指针修改它所指向的内容(即可以改变那个整数值),但是你不能更改指针本身的值(即将其指向另一个地址)。简单来说: - **指针不可变**指针变量不能再指向其他位置。 - **内容可变**:可以通过该指针修改其所指向的数据。 例如: ```c++ int a = 5; int b = 10; int* const ptr = &a; // 初始化后,ptr就不能再指向别的地方了 // 下面这行会报错,因为ptr是指向固定地址的 // ptr = &b; *a = 8; // 这是可以的,可以改变a的值 ``` ### 2. `int const *` (等价于 `const int*`) 而 `int const *` 则表示的是一个指向常量整数类型的指针,也就是**指针指向的内容是只读的**,但指针本身不是常量。因此你可以让指针指向新的内存地址,只是不能通过此指针去修改原先指向的那个数据。总结就是: - **指针可变**指针可以重新绑定到其它的位置上。 - **内容不可变**:不允许直接经由该指针修改它所引用的对象的状态。 例子如下: ```cpp int x = 6; int y = 7; const int *p = &x; *p = 9; // 错误! p是指向常量的,所以不能用于修改*x的值 p = &y; // 可以的, 修改指针使其指向其他的对象 ``` 这两种形式的关键在于它们对“谁”施加了`const`限定符——前者是对指针自身而言,后者则是针对指针所指向的目标数据是否允许被改写的规则设定。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值