Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++ 指针和const指针赋值

C++ 指针和const指针赋值

作者头像
全栈程序员站长
发布于 2022-09-14 03:24:06
发布于 2022-09-14 03:24:06
83500
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

一 简单示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int a;
const int c_a = 1;

int* p;
p = &a;
p = &c_a; // error

即非const指针不能指向const数据(数据为非指针类型)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int a;
const int c_a = 1;

const int* p1;
p1 = &a;
p1 = &c_a;

即const指针既可以指向const数据又可以指向非const数据(数据为非指针类型)。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 一层间接关系
int* p;
const int* p1;

p1 = p;

// 二级间接关系
int** p2;
const int** p3;

p2 = &p;
p2 = &p1; // error

p3 = &p;  // error
p3 = &p1;

p3 = p2;  // error

vs中关于上面三个错误的提示信息如下:

所以,在二级间接关系中,数据为指针时,const指针赋值表现的并不一致(p3 = &p不通过,p3 = p2不通过)。

二 综上

如果数据类型本身并不是指针,则可以将const数据或非const数据的地址赋给指向const的指针,但只能将非const数据的地址赋给非const指针。二级间接关系中,需要注意const指针的赋值。

三 参考

C++ primer plus 第6版

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/157475.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年7月1,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C++ 顶层 const
本文的主要參考来源来自于:C++ Primer 中文版(第 5 版) 第 57 面至第 58 面
全栈程序员站长
2021/12/03
3170
C/C++ const
const是C语言的关键字,经C++扩充,功能变得强大,用法复杂。const用于定义一个常变量(只读变量)。当const与指针、引用、函数等结合起来使用时,情况会变得更加复杂。下面将从七个方面总结const的用法。
恋喵大鲤鱼
2018/08/03
9400
面试爱问之const关键字
const是constant的简写,用来定义常量,如果一个变量被const修饰,那么它的值就不能再被改变。
用户8913398
2023/09/06
3940
面试爱问之const关键字
C语言指针的初始化和赋值
指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不可以直接用整型地址值(但是int*p=0;除外,该语句表示指针为空)。此时,*p只是表示定义的是个指针变量,并没有间接取值的意思。
全栈程序员站长
2022/08/01
2.8K0
C语言指针的初始化和赋值
熬夜整理的万字C/C++总结(二),值得收藏
假如我们定义了 char a=’A’ ,当需要使用 ‘A’ 时,除了直接调用变量 a ,还可以定义 char *p=&a ,调用 a 的地址,即指向 a 的指针 p ,变量 a( char 类型)只占了一个字节,指针本身的大小由可寻址的字长来决定,指针 p 占用 4 个字节。
C语言与CPP编程
2021/08/03
1.3K0
熬夜整理的万字C/C++总结(二),值得收藏
C - 指针C语言指针的总结
C语言指针的总结 1. 变量 不同类型的变量在内存中占据不同的字节空间。 内存中存储数据的最小基本单位是字节,每一个字节都有一个内存地址,这个地址是一个十六进制的数。 声明一个变量,在内存中是从高字节向低字节分配连续的指定字节数的空间。 任何数据在内存中都是以其二进制的补码形式存储的,低位存储在低字节,高位存储在高字节。 变量的值:存储在变量中的数据,叫做变量的值。 变量的地址:一个变量是由一个或者多个字节组成的,组成这个变量的低字节的地址,就是这个变量的地址。 如何取出变量的地址:使用&(取地址运算符)运
xx_Cc
2018/05/10
4.4K0
C语言面试题汇总(持续更)「建议收藏」
笔者最近在找工作,因此对应聘C/C++嵌入式开发工程师容易被问到,或者经常搞不清楚的问题做一个汇总,也希望能对找工作的小伙伴起到帮助参考的作用。本篇集中于C语言方面的面试题目。
全栈程序员站长
2022/09/27
1.6K0
常量指针,指针常量的区别是什么_指针常量与常量指针
定义: 又叫常指针,可以理解为常量的指针,也即这个是指针,但指向的是个常量,这个常量是指针的值(地址),而不是地址指向的值。
全栈程序员站长
2022/11/10
1.3K0
【C++】智能指针详解
参考资料:《C++ Primer中文版 第五版》 我们知道除了静态内存和栈内存外,每个程序还有一个内存池,这部分内存被称为自由空间或者堆。程序用堆来存储动态分配的对象即那些在程序运行时分配的对象,当动态对象不再使用时,我们的代码必须显式的销毁它们。
全栈程序员站长
2022/09/14
9680
【C++】智能指针详解
【C++100问】深入理解理解顶层const和底层cons
1、顶层const和底层const对比 《C++primer》中写到: 顶层 const 表示指针本身是个常量; 底层 const 表示指针所指的对象是一个常量。 指针类型既可以是顶层 const
我是管小亮
2020/04/20
2.2K0
C语言之指针变量
  4、指向常量的常量指针:有2个const修改,既不能间接修改变量的值,也不可重新赋值新变量地址
tandaxia
2018/09/27
2.2K0
c++ 函数指针
声明指针时,必须指定指针指向的数据类型,同样,声明指向函数的指针时,必须指定指针指向的函数类型,这意味着声明应当指定函数的返回类型以及函数的参数列表。
全栈程序员站长
2022/06/25
5400
c++那些事儿9.0指针
知识点综述: ---- 指针:地址。 1.0在32位的cpu上,cpu一般由32根地址线组成,所以地址大小为32位 即4byte,同理可得指针大小为4byte; 2.0指针是有类型的,和它指向的数据类型相同; double p1=11,*p2; p2=&p1;//p2为double型指针 3.0数组名是一个const指针。 int arr[6]; arr是常量指针。 二维数组名是指向行的指针,它指向一整行元素而非个
热心的社会主义接班人
2018/04/27
7160
c++那些事儿9.0指针
c和c++的区别(二)const和引用、一级指针、二级指针的结合
在C++中,当const关键字修饰常量时,const所在的位置,会不会出现问题。主要是担心代码会修改被const修饰的常量值,如果有这样的风险,编译器不会通过代码的编译的。
lexingsen
2022/02/24
4960
c和c++的区别(二)const和引用、一级指针、二级指针的结合
C++:18---const关键字(附常量指针、指针常量、常量指针常量)
一、const变量的一些基本特点 ①const修饰的变量不能被修改 const int a=10;a=20;//错误 ②因为const修饰的变量不能被修改,所以必须被初始化 int a=10;const int b=a; //正确const int c=10; //正确 ③const修饰的变量可以赋值给其他值 const int a=10;int b=a;//正确 ④可以有常量引用 int a=10;const int &b=a; 二、在其他文件中使用const常量(extern) const常量默
用户3479834
2021/02/03
1.4K0
C/C++指针详解之基础篇(史上最全最易懂指针学习指南!!!!)「建议收藏」
在风起云涌的编程世界中,C/C++作为编程界的扛把子,以霸主地位而屹立不倒,究其原因,它有其他语言无法相媲美的“底牌”而存在,那就是——指针。指针被称为是C/C++中的精髓,也有人说由于指针的存在让C/C++变得更加难学,难懂,难消化。果真是这样吗?本篇文章让我们一起来揭开指针的真正面纱。
全栈程序员站长
2022/08/31
1.2K0
C/C++指针详解之基础篇(史上最全最易懂指针学习指南!!!!)「建议收藏」
C++基础 杂记(一)
函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义为全局的变量,但会破坏此变量的访问范围(使得在此函数中定义的变量,不仅仅只受此函数控制)。static 关键字则可以很好的解决这个问题。
xxpcb
2020/08/04
4040
C++函数指针详解
每一个函数都占用一段内存单元,它们有一个起始地址,指向函数入口地址的指针称为函数指针。
全栈程序员站长
2022/06/25
3600
【计算机本科补全计划】C++ Primer:指针和const限定符
正文之前 今天下午看了一下午的计算机组成与设计,结果好死不死的看到了设计部分--处理器的设计。天哪,我现在还只是一个准备给人装一台电脑做实验田的家伙,连用都不咋会,你还叫我设计!!!虽然我学过数电模电和电路原理,也学过单片机组成和应用,但是不代表我对这些逻辑元件感兴趣啊!!!所以很果断的,我到了晚饭时节就果断的抛弃了第四章跳到第五章--存储层次和并发设计,这才有了点重新活下去的勇气。然后晚间继续看神书--《C++ Primer 第五版》,这里面的只是真的是看得我如痴如醉,配合不少在计算机组成里面看到的原
用户1687088
2018/05/07
6790
【计算机本科补全计划】C++ Primer:指针和const限定符
C二级指针
指针可以指向一份普通类型的数据,例如 int、double、char 等,也可以指向一份指针类型的数据,例如 int *、double *、char* 等。
随心助手
2021/03/04
5380
C二级指针
相关推荐
C++ 顶层 const
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验