千家信息网

C语言中const,指针和引用的关系是什么

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇"C语言中const,指针和引用的关系是什么"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来
千家信息网最后更新 2026年11月01日C语言中const,指针和引用的关系是什么

这篇"C语言中const,指针和引用的关系是什么"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"C语言中const,指针和引用的关系是什么"文章吧。

const 与指针

我们写一段代码来探究以下

int a = 10, b = 20;int* p1 = &a;*p1 = 100;p1 = &b;const int* p2 = &a;int const* p3 = &a;int* const p4 = &a;const int* const p5 = &a;

在上面 const int* p2;与int const* p3= &a;是等价的

const在星号的左边,我们的const修饰的是指向能力,也就是说我们可以改变p2的自身值,但是不能修改 *p2 的值;

int x = *p2;
*p2 = 100; // err 是错误的
p2 = &b; //是正确的

const在星号的右边,我们p4自身值不能改变,但是可以改变 *p4 的值

int x = *p4;
*p4 = 100; // 是正确的
p4 = &b; //err 是错误的

而p5既不能改变自身值也不可以改变 *p5 的值

我们现在看下面的代码,来探讨哪一句正确哪一句错误

int a = 10,b = 20;const int *p = &a;    *p 不能改int *s0 = p;    使得 *p 可改 const int *s1 = p;  *p不可改int * const s2 = p;   *p可改 s2 不可改const int * const s3 = p;*p不可改 s3 不可改

我们对const int* p = &a;分析,可以看出const修饰使得 *p 不可以修改;继而分析下面的代码是否会对 *p 产生修改

首先我们可以看出我们的 s0 s1 s2 s3 都等于 p 继而 *s1 *s2 *s3 *p 都是a,我们之前提到过能力可以收缩,而不可以扩展;

1.s0等价于p,而我们对*s0可以进行修改,继而是错误的;

2.const修饰 *s1,所以我们无法修改 *s1,可以修改s1,继而是正确的;

3.cosnt修饰s2,我们可以修改*s2,而不能修改s2,所以是错误的;

4.我们既不可以修改s4也不可以修改 *s4 ,所以是正确的

我们再来看这样一段代码,这次我们将对p进行const修饰

int a = 10,b = 20;int * const p = &a;     p不能改int *s0 = p;                           s0可改 *s0 == *p 可改const int *s1 = p;                *s1 不可改 s1可改 int * const s2 = p;                  s2不可改 *s2可改const int * const s3 = p;    s3不可改 *s3不可改

我们对int* const p = &a;分析,这次我们的const修饰p,使得p的值不能修改,而 *p 可以修改,接着分析下面的代码

首先于上面一样, s0 s1 s2 s3 都等于 p 继而 s1 s2 s3 p 都是a

1.s0 与 p相等,我们可以修改*p 可以修改s0,但是对p并没有进行修改,所以是正确的

2.const修饰 *s1,我们不能修改 *s1,可以修改s1,与p无关所以是正确的

3.const修饰 s2 ,我们不能修改 s2,可以修改*s2,与p无关所以是正确的

4.这里我们同样既不可以修改 s3,也不可以修改 *s3,同样与p无关,所以是正确的

如果我们通过强制转换使得通过常量地址改变该值

int main(){        const int a = 10;        int b = 0;        int *p = (int*)&a;        *p = 100;        b = a;        cout<<"a="<

对于c++,我们产生的结果为a=10,b=10,*p=100,对于b=a,依旧给b赋值的是10

造成这样的原因实际上是因为C++编译会将常量a进行数值替换,继而b=a变成了b=10,C++对于常变量当作常量

当使用c语言编译这段代码

int main(){        const int a = 10;        int b = 0;        int *p = (int*)&a;        *p = 100;        b = a;        printf("a=%d b=%d *p=%d\n",a,b,*p);        return 0;}

得到的值为a=100,b=100,*p=100

const 与引用

我们写一段代码来看看const 与引用的关系

int a = 10,b = 20;int *p = &a;int *s = p;int *&pref = p;  //给p起了一个别命prefint &*pref = p;  //错误!!!

int &*pref = p;是错误的,该代码是一个指针指向的是一个引用,是不允许编译通过的,因为在语法规则上引用不具有地址,即使引用可以进行取地址,但是是不容许这样做的,也就是我们可以定义一个引用去引用指针,而不能定义一个指针去指向引用

const 与指针、引用

我们在写一段代码详细探讨

int a = 10;int *s = &a;int *&p1 = s;const int *&p2 = p;int * const &p3 = p;int * & const p4 = p;

以上就是关于"C语言中const,指针和引用的关系是什么"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

代码 指针 错误 内容 语言 分析 地址 常量 指向 面的 编译 也就是 文章 星号 知识 等价 篇文章 而是 能力 C++ 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 云信互联网科技有限公司 狮子座互联网科技 万易互联网科技有限公司 互联网女皇 腾讯科技 长亮科技互联网金融 上海亿帐通互联网科技 重庆科技学院互联网 哈尔滨新华互联网科技 佩信高科技互联网 武汉健翔互联网络科技有限公司 健康食品互联网创新科技园项目 中国互联网有什么科技 互联网硬科技公司 福州德业互联网科技 云鲸互联网络科技有限公司 广西科技产业互联网是什么 科技信息时代互联网发展 盐城市攀科互联网科技有限公司 长沙易易互联网科技有限公司 广东猫王互联网科技有限公司电话 互联网科技名片 上海致骋互联网科技 赫美联合互联网科技 济南华为互联网科技产业总部基地 汽车互联网创新科技园 和信科技工业互联网 西安小鹰速贷互联网科技有限公司 科技互联网海报 互联网与数字科技关系 互联网 科技节活动 微视频大赛
0