栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C记录——指针与const

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C记录——指针与const

const与指针——7.21

目录

一、const

1.const是什么

2.const的作用

二、const 与指针

1.const 在指针中的作用

2.一些例子

1.一级指针

2.二级指针

总结


前言

const与指针的一些问题,就是定义过来定义过去,规定过来规定过去


一、const

1.const是什么

 const是C/C++中的类型修饰符。

2.const的作用

1、对变量声明只读特性,保护变量值以防被修改。

2、节省空间,避免不必要的内存分配。const修饰的变量在程序运行过程中只有一份拷贝。

3、提高程序运行效率。编译器不为普通const常量分配存储空间,而是将他们保存在符号表中,这使得它成为一个编译期间的常量,没有了存储和读取内存的操作。

二、const 与指针

1.const 在指针中的作用

const可以修饰两种东西,一个是变量本身,一个是解引用这个过程,就是指向谁

2.一些例子

1.一级指针
const int a = 0; int b = 0; //1
int* p = &a;                //2
const int* p = &a;          //3
const int * const p = &a;   //4
*p = 10;                    //5
 p = &b;                    //6

在1我们定义了两个变量a,b。其中用const修饰了a,使a常量化,不可被修改,由此我们来分析在2,3,4 情况下的5,6的正确与否

在2时候,首先2本身就是错的,因为1的a 是一个常量,如果我们在这里不进行const 的话,使其成立,那么意味着我们可以后续通过*p来修改a的值,这就矛盾了,编译器不会通过,所以2是错误的。

在3时候,这里的const修饰的是*p【const在修饰时视int等为透明】,意味着我们没有办法通过*p来修改除,也就是*p的解引用是不可进行的,可以理解为【*】这条路是断的无法通行的。所以在3的情况下,5是错误的;但是虽然*p是不可进行的,但是p本身仍然是可以进行操作的,所以在3情况下,6是对的。可以理解为【p这条路是断的,但是它的路牌仍然是可修改的,可以指向其他路径】。

在4时候,这里的const同时修饰了*p和p本身,在这种情况下,【这条路不仅是断的,而且其路牌也不可修改】,所以4情况下,5,6都为错误。

那么在什么情况下可以达到5对6错呢?这里就需要修改前置条件,如下:

int a = 0;            //1
int * const p = &a;   //新
*p = 10;              //5
p = &b;               //6

在a不再是常量的情况下,我们就可以后续通过*p来修改a的值了。在此情况下,const 修饰的是p本身,即p【自己的路牌无法修改,但是路是通的】,在这种情况下,5是对的,解引用可行,a的值被修改,而6错误,p的指向不可修改。

2.二级指针

在二级指针中,**s啥的本质上和一级指针是一样的,只要注意const修饰的对象即可。这里不再赘述。


总结

要注意const  修饰的是谁,是这个变量,还是一个过程不让它搞事

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1021985.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号