当前位置: 首页 > article >正文

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

目录

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

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

3. 关于const修饰指针

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

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

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


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

代码示例1:

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

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

代码示例2:

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

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

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修饰指针

对于如下代码:

int main() {
	int a = 10;
	int b = 20;
	int* p = &a;
	p = &b;
	return 0;
}

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

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

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

int main() {
	int a = 10;
	int b = 20;
	int* const p = &a;
	p = &b;
	return 0;
}

运行结果如下:

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

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:修改指针变量的值:

int main() {
	int a = 10;
	int b = 20;
	int const *p = &a;
	p = &b;
	return 0;
}

运行结果如下: 


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

int main() {
	int a = 10;
	int b = 20;
	int const *p = &a;
	*p = b;
	return 0;
}

运行结果如下: 

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

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

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

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

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

int main() {
	int a = 10;
	int b = 20;
	int const* const p = &a;
	p = &b;
	*p = b;
	return 0;
}

运行结果如下:

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


http://www.kler.cn/a/468407.html

相关文章:

  • web系统漏洞攻击靶场
  • (已开源-AAAI25) RCTrans:雷达相机融合3D目标检测模型
  • JavaScript语言的字符串处理
  • 【NLP高频面题 - 分布式训练篇】ZeRO主要为了解决什么问题?
  • OpenCV计算机视觉 05 图像边缘检测(Sobel算子、Scharr算子、Laplacian算子、Canny边缘检测)
  • 【微服务】2、网关
  • Gensim文本预处理
  • weblogic安装 12.2.1.4.0集群
  • PHP Array:精通数组操作
  • Meta探索大模型记忆层,扩展至1280亿个参数,优于MoE
  • 9.系统学习-卷积神经网络
  • 如何实现多条件搜索
  • Kali linux镜像站下载,比官网快
  • QT中Qstring和QByteArray有什么区别?
  • Linux(Centos版本部署)超详细教程
  • Go语言的基础知识
  • Python中使用正则表达式的场景
  • MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分
  • 【Python】super() 函数和 MRO 顺序的实例剖析
  • Python自动化小技巧27——代理IP变化爬虫
  • XGBoost 分类模型优化:超参数调优与性能提升的协同攻略
  • 代码随想录D32-35 动态规划01-03 Python
  • (二)元问题和元指令:问GPT怎么问
  • 【开源免费】基于SpringBoot+Vue.JS物资管理系统(JAVA毕业设计)
  • 【Qt】将控件均匀分布到圆环上
  • 业务连续性计划(BCP)是什么?