打印
[疑难问答]

const修饰指针

[复制链接]
100|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
loutin|  楼主 | 2025-2-21 01:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
const修饰的变量不可直接被修改,可通过指针间接修改(int a = 10;int* p = &a;*p = 20)
const可放在类型前,也可放在类型后,建议放类型前
const int a = 10;a并不是真正的常量,因为a可以被间接修该,所以int arr[a], case a都错误
const修饰的变量并非不可被修改,那const修饰变量,意义何在?

①:让编译器直接进行修改检查,若被修改直接警告或报错
②:告诉其他程序员这个变量不要改,也属于一种自描述
char* p = "hello bit"这才是真正意义上的不可被修改(关于这块的处理需了解操作系统)
const修饰数组
代表数组中的每个元素都不可被修改

const修饰指针
指针:就是一个地址
指针变量:一个变量,用来保存地址(注意区分两者的差别)
为什么要有指针?提高CPU内存寻址的效率
地址需要开辟空间存储吗?不需要,内存中每个地方的地址是由计算机规定好的
地址为只读,不能随便改
在c中,任何变量&,全都是从最低地址开始的
左值和右值的区别
int x         x = 100 x的空间(把100放到x的空间里面),变量的属性,左值
           int y = x     x的内容,数据的属性(把x的值赋给y),右值
对指针解引用,代表指针所指向的目标



int a = 10;

const int* p = &a; int* q = p;(警告)

int* p = &a; const int* q = p; (无警告)

经验:如果把一个类型限定并不严格的变量,赋给一个类型限定非常严格的变量,编译器不会报错;如果把一个类型限定非常严格的变量,赋给一个类型限定并不严格的变量,编译器会报错

const修饰函数
在c中,任何函数传参都一定要形成临时变量,包括指针变量
const修饰函数参数:该参数不可被修改,只读

const修饰函数返回值:const int* test()告诉编译器,告诉函数调用者不要试图通过指针修改函数返回值所指向的内容


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

1425

帖子

0

粉丝