【C语言】_const修饰指针变量

目录

[1. 关于const修饰变量(常变量)](#1. 关于const修饰变量(常变量))

[2. 使用指针解引用修改常变量的值:](#2. 使用指针解引用修改常变量的值:)

[3. 关于const修饰指针](#3. 关于const修饰指针)

[3.1 指针类型* const 指针变量 = &变量(const在*右)](#3.1 指针类型* const 指针变量 = &变量(const在*右))

[3.2 指针类型 const * 指针变量 = &变量(const在*左)](#3.2 指针类型 const * 指针变量 = &变量(const在*左))

[3.3 指针类型 const * const 指针变量 = &变量](#3.3 指针类型 const * const 指针变量 = &变量)


1. 关于const修饰变量(常变量)

代码示例1:

当const修饰变量时,表示该变量具有常属性(不能被修改);

注:对于C++程序,const修饰的变量就是常量;

代码示例2:

const修饰的变量a不可用于数组下标寻址,报错为应输入常量表达式,故const修饰的变量虽然具有常属性,但仍是变量,而不是常量,称之为常变量;

2. 使用指针解引用修改常变量的值:

cpp 复制代码
int main() {
	const int a = 10;
	int* pa = &a;
	printf("a = %d\n", a);
	*pa = 0;
	printf("a = %d\n", a);
	return 0;
}

运行结果如下:

虽然通过const修饰变量不能直接修改,但可使用其指针变量对其进行修改;

但使用const修饰变量的初衷就是使得该变量不可被修改,故而引入const修饰指针:

3. 关于const修饰指针

对于如下代码:

cpp 复制代码
int main() {
	int a = 10;
	int b = 20;
	int* p = &a;
	p = &b;
	return 0;
}

约定某一起始逻辑地址,其内存存储单元地址及内容如下:

3.1 指针类型* const 指针变量 = &变量(const在*右)

1、代码示例1:修改指针变量的值:

cpp 复制代码
int main() {
	int a = 10;
	int b = 20;
	int* const p = &a;
	p = &b;
	return 0;
}

运行结果如下:

2、代码示例2:修改指针变量指向的变量的值:

cpp 复制代码
int main() {
	int a = 10;
	int b = 20;
	int* const p = &a;
	*p = b;
	printf("%d\n", a);
	return 0;
}

运行结果如下:

对于指针类型* const 指针变量 = &变量

const直接修饰指针变量,限制指针变量本身,表示指针变量的值不可被修改,即该指针变量不可再指向其他变量

而指针变量指向的变量值可以修改;

3.2 指针类型 const * 指针变量 = &变量(const在*左)

1、代码示例1:修改指针变量的值:

cpp 复制代码
int main() {
	int a = 10;
	int b = 20;
	int const *p = &a;
	p = &b;
	return 0;
}

运行结果如下:

2、代码示例2:修改指针变量指向的变量的值:

cpp 复制代码
int main() {
	int a = 10;
	int b = 20;
	int const *p = &a;
	*p = b;
	return 0;
}

运行结果如下:

对于指针类型 const *指针变量 = &变量

const修饰解引用的指针变量,限制指针变量指向的变量,表示指针变量指向的变量的值不可通过指针被修改

而指针变量本身的值可以修改,即指针变量的指向可修改;

3.3 指针类型 const * const 指针变量 = &变量

在*两端都加const修饰指针变量:

cpp 复制代码
int main() {
	int a = 10;
	int b = 20;
	int const* const p = &a;
	p = &b;
	*p = b;
	return 0;
}

运行结果如下:

在*两端都加const修饰指针变量,表示指针变量本身的值和指针变量指向的变量的值都不可被修改;

相关推荐
phltxy5 小时前
C语言操作符详解
java·c语言·算法
RuoZoe6 小时前
从 2026 年 3 月 1 日开源,到 26.10.9:Jalium UI 半年时间到底走了多远?
c语言·c++
aqiu1111116 小时前
【LeetCode 902】最大为 N 的数字组合 - 详细题解与数位组合思路
数据结构·算法·leetcode·蓝桥杯·数位dp
辰烨chenye6 小时前
LeetCode Hot 100 题解 · 哈希篇
算法·leetcode·哈希算法
罗西的思考7 小时前
DreamZero 与 DreamDojo:世界模型与策略的分层协同综合分析与对比
人工智能·算法·机器学习
玖玥拾7 小时前
LeetCode 219 存在重复元素 II
算法·leetcode·哈希算法·散列表
知无不研8 小时前
c语言中循环的介绍与简单应用
c语言·开发语言·算法·循环·for·while
a187927218319 小时前
【算法】动态规划第四篇:背包收官——min 哨兵、计数世界与组合排列分水岭
算法·leetcode·动态规划·dp·01背包·算法讲解·决策合并
HRTOS10 小时前
HRTOS 4.0 驱动库:06_Storage 存储设备驱动——24C02 EEPROM与I²C驱动开发
c语言·驱动开发·嵌入式硬件·51单片机