int const *和int * const以及const int * const的区别
int const *
是一个指向常量整数的指针
指向了一个不能被修改的值但是指针指向的地址可以改变
const
在数据类型的一侧,所以可以放在int的前面const int *
,(从c++ prime
了解到)
#include <stdio.h>int main() {const int q = 5;int const *p = &q;// 等价于const int *p1 = &q;const int q2 = 7;p = &q2;return 0;
}
int * const
是一个指向整数的常量指针
- 指针指向的地址不能被改变,但是地址中的值可以被改变
#include <stdio.h>int main() {const int q = 5;int q1 = 5;// 错误写法 指向int 而非const int 整形常量/*int *const p = &q;*/int *const p = &q1;*p = 11;int q2 = 1;// 只读变量p ,p指向的地址不能改变//p = &q2;return 0;
}
const int * const
是一个指向常量整数的常量指针
- 第一个const可以位于数据类型的任意一侧,所以等效写法
int const * const
- 此指针既不能指向新地址,也不能修改指向的值
#include <stdio.h>int main() {const int q = 5;int const * const p = &q;// assignment of read-only location ‘*p’*p = 10;const int q2 = 10;// assignment of read-only variable ‘p’p = &q2;return 0;
}
这2句报错也能很好的告诉我们1. 只读变量2. 只读位置
螺旋规则解释语法
- 从变量名开始,然后顺时针移动到下一个指针或类型。重复直到表达式结束 (原文中的图)
int const * const va
: 变量是-> const -> 是指针 (const pointer
)->指向const
->int
(const int
指向常量值)- 可看做从右到左
因此
int const *
指针指向常量int
int * const
常量指针指向int
int const * const
常量指针指向常量int
int ** const
常量指针指向一个指针且该指针指向一个int
int * const *
指针 指向 一个常量指针且该指针指向int
int const **
:指针 指向一个指针且该指针指向常量int, 看做const int **
更好理解int * const * const
常量指针指向一个常量指针且该指针指向int
暂时忽略c++中的顶层const和底层const没有记错的话: c标准中const是从c++标准中引入的…
由于c++引用原因,int &a = b;
,导致我经常int* p;
这样声明指针
这种声明很容易导致混淆 int* p,q;:
长时间写c++,会习惯性理解成声明了2个指针
但实际上是- p是指针- q是`int`
尽管这种写法是正确的,
一般都这样写int *p,q;
,不容易导致混淆
上面的写法属于习惯问题,编译器并不会报错
int const *和int * const以及const int * const的区别相关推荐
- const volatile同时限定一个类型int a = 10
const和volatile放在一起的意义在于: (1)本程序段中不能对a作修改,任何修改都是非法的,或者至少是粗心,编译器应该报错,防止这种粗心: (2)另一个程序段则完全有可能修改,因此编译器最好 ...
- c++入门之——const在函数名前面和函数后面的区别
1 class Test(){ 2 public: 3 Test(){} 4 const int foo(int a); 5 const int foo(int a) const; 6 }; 一.概念 ...
- python中int是什么的缩写_python中int是什么类型
python中的基本数据类型 1:虽然python中的变量不需要声明,但使用时必须赋值 整形变量 浮点型变量 字符型 2:可以一个给多个变量赋值,也可以多个给多个变量赋值 3:python3中有6个标 ...
- c语言const限制什么,[C语言]类型限定词const解析
标签: 作为C90增加的一个受限类型关键字,const赋予了它修饰的变量一个新属性--不变性,如果一个变量声明中带有关键字const,则无法通过赋值.增减运算来修改该变量的值. 一.指针与const结 ...
- 类与对象:类的6个默认成员函数: 构造函数、析构函数、拷贝构造函数、赋值操作符重载、默认拷贝构造与赋值运算符重载的问题、const成员函数、 取地址及const取地址操作符重载
1.类的6个默认成员函数 如果一个类中什么成员都没有,简称为空类.任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数. 构造函数 析构函数 拷贝构造函数 赋值操作符重载 const成员函数 ...
- c语言const字符串,C语言之正确使用const
一.const用途 const是一个C语言的关键字,它限定一个变量不允许被改变. 1.const与基本类型 const char m;//限定m不可变. 2.const与指针 1).const在*前面 ...
- php中int()强制转换,php下intval()和int强制转换使用的区别是什么
php下intval()和int强制转换使用的区别是:1.[intval()]如果参数是字符串,则返回字符串中第一个不是数字的字符之前的数字串所代表的整数值:2.转换为int的PHP字符串,在使用之前 ...
- const int *p说明不能修改_C语言关键字const和指针结合的使用
C语言中,const 的作用是把变量变为一个只读的变量.与指针结合起来,有以下几种用法,下面分别进行说明. const int p; const int *p; int * const p; cons ...
- mysql的int多少溢出_mysql 整型(int)数字溢出在程序和数据库设计中的考虑
以下试以整型(int)抛砖引玉: 一:MySQL5 以MySQL5版本为例,大多数管理员可能把自增数字.或者其它应用数字字段的列属性设置为int类型,int占用4个字节,而int又分为无符号型和有符号 ...
- vector<int> v, vector<int> v(n) 与vector<int> v[n]的区别
一.vector<int> v表示声明一个容器v,并且不给他预定存储空间. 运行: vector<int> v;cout << v.size(); 输出为: 0 二 ...
最新文章
- Android/Java 中线程(Thread)的使用
- Linux内存管理大图(第三稿)
- 区块链技术的本质是分布式数据库
- 快手在直播间里养起了AI宠物,连柳岩、大鹏都爱不释手
- 面试:a==1 a==2 a==3 是 true 还是 false?
- 亲历者说 | 完整记录一年多考拉海购的云原生之路
- Python中使用requests和parsel爬取喜马拉雅电台音频
- uni-app中使用lodash_uniapp适配到微信小程序注意事项
- C和指针之部分理解和编码总结
- VK Cup 2016 - Round 1 (Div. 2 Edition) A. Bear and Reverse Radewoosh 水题
- connection error mysql_MySQL ConnectionError 安装错误 解决方法
- 使用API Monitor监测到目标程序对系统API函数的调用(常用分析工具)
- flowplayer播放需求
- Since Due to Because of Because 的用法和区别
- 半小时一篇文过完C语言基础知识点
- 固定资产拆分比例怎么计算_固定资产折旧的计算方法
- matlab显示变化的数字,如何在MATLAB中一起显示字符串和数字?
- 【二叉树】根据后续和中序遍历输出前序遍历 [建树+非建树做法]
- 我的网安之路——2020年总结
- 【Linux】ARM篇一--计算机基础与RAM处理器概论
热门文章
- 2022年焊工(初级)考试模拟100题模拟考试平台操作
- SelectObject和DeleteObject 函数
- OpenCV中waitKey()函数的深度解析
- 假设有50瓶饮料,喝完3个空瓶可以换一瓶饮料,依次类推,请问总共喝了多少瓶饮料?
- leetcode_middle_2_406. Queue Reconstruction by Height
- webpack的proxy代理配置
- 数据结构 — 浅析红黑树原理以及实现
- springboot班级同学录网站
- 4. PCIe 接口时序
- DAO层,Service层,Controller层的作用