C语言笔记19 —— 指针与const

我们知道const是一个修饰符,加在变量前面;指针是一种变量(包含指针本身和指针所指的那个变量)

当指针指向一个值,指针本身可以是const,那个变量也可以是const

指针是const

表示一旦得到了某个变量的地址,不能再指向其他变量

eg. int * const q = &i; //q是const,指向了i的地址(不可改变)

*q = 26; //OK

q++; //ERROR

所指是const

表示不能通过这个指针去修改那个变量(并不能使的那个变量成为const)

eg. const int *p = &i;

*p = 26; //ERROR (*p)是const

i = 26; //OK

&j; //OK

意思是,p是一个指针,指向了i,i依然可以做运算,p也可以改变(因为p不是const),不能变的是:不能通过p去做赋值(eg. *p = 26;)。

p可以指向其他,i可以被赋予其他值,但不能通过p去修改i

什么意思?

int i;

①const int* p1 = &i;

②int const* p2 = &i;

③int *const p3 = &i;

判断哪个被const了的标志是const在*的前面还是后面

在*前:表示它所指的东西不能被修改①②

在*后:表示指针不能被修改③

转换

总是可以把一个非const的值转换成const的

void f(const int* x);

int a = 15;

f(&a); //OK

const int b = a;

f(&b); //OK

b = a + 1; //ERROR

应用:当要传递的参数的类型比地址大的时候,这是常用的手段。既能用比较少的字节数传递值给参数,又能避免函数对外面的变量的修改

const数组

const int a[] = {1,2,3,4,5,6};

数组变量已经是const的指针了,这里的const表明数组的每个单元都是const int,所以必须通过初始化进行赋值

保护数组值

因为把数组传入函数时传递的是地址,所以那个函数内部可以修改数组的值,为了保护数组不被破坏,可以设置参数为const

eg. int sum(const int a[], int length);

相关推荐
لا معنى له4 分钟前
WAM与AC-WM:具身智能时代的世界动作模型与动作条件世界模型
人工智能·笔记·学习
爱学习的程序媛1 小时前
【Web前端】JavaScript设计模式全解析
前端·javascript·设计模式·web
云泽8081 小时前
深入 AVL 树:原理剖析、旋转算法与性能评估
数据结构·c++·算法
小码哥_常1 小时前
从SharedPreferences到DataStore:Android存储进化之路
前端
老黑1 小时前
开源工具 AIDA:给 AI 辅助开发加一个数据采集层,让 AI 从错误中自动学习(Glama 3A 认证)
前端·react.js·ai·nodejs·cursor·vibe coding·claude code
jessecyj2 小时前
Spring boot整合quartz方法
java·前端·spring boot
苦瓜小生2 小时前
【前端】|【js手撕】经典高频面试题:手写实现function.call、apply、bind
java·前端·javascript
Wilber的技术分享2 小时前
【LeetCode高频手撕题 2】面试中常见的手撕算法题(小红书)
笔记·算法·leetcode·面试
天若有情6732 小时前
前端HTML精讲03:页面性能优化+懒加载,搞定首屏加速
前端·性能优化·html
踩着两条虫2 小时前
AI驱动的Vue3应用开发平台深入探究(十):物料系统之内置组件库
android·前端·vue.js·人工智能·低代码·系统架构·rxjava