【C++ grammar】常量、指针、Usage of using, typedef, and #define

目录

  • 1、常量 (Constant)
  • 2、指针(Pointer)
  • 3、Usage of using, typedef, and #define

1、常量 (Constant)

常量是程序中一块数据,这个数据一旦声明后就不能被修改了。

如果这块数据有一个名字,这个名字叫做命名常量;比如 const int A = 42; 其中A就是命名常量;
如果这块数据(这个常量)从字面上看就能知道它的值,那它叫做“字面常量”,比如上面例子中的“42”就是字面常量

//const datatype CONSTANTNAME = VALUE;
const double PI = 3.14159;
const int SIZE = 3;
int const X = 5;
const char C = 'k';
const char* STR = "Hello";		//字符串常量Hello放在常量区,而且是一个指针类型,所以必须加上const

如果我们对PI进行赋值操作,会报错:表达式必须是可以修改的左值。
关于这个问题详细的讲解见:
1、https://blog.csdn.net/qq_42604176/article/details/108909002
2、https://blog.csdn.net/JQ_AK47/article/details/53169799

2、指针(Pointer)

指针有两个属性:
1、指针变量本身
2、指针变量指向的数据
在这里插入图片描述
在这里插入图片描述

int y = 10;
const int x=5;
const int* p =&x; 
p = &y;				//不会报错
*(p) = y;       //报错

解释:由于x是个常量,所以它的值不可以被改变,也就是说地址不能修改,也就是说p存的地址是个常量,所以要加const。p可以指向其他变量

int x=5;
int* const  p =&x; 

解释:p指针是个常量,它不能指向其他变量了。但是它指向的数据x是可以改变值的。

const int x=5;
const int* const  p =&x; 

解释:x是个常量,p也是个常量,不能指向其他变量了
在这里插入图片描述
指针是一个地址,它长得像 0x8FFF 这个样子。地址呢,就是某个内存位置的一个编号。那这个位置的内存是可以存放一些数据的。这些数据就叫做“指针所指的数据”或者“指针指向的数据”。
一些概念:

我们把指针放到一个变量里面,就是指针变量
我们把指针放到常量中,就是指针常量

那如果一个指针(也就是地址,比如0x8FFF)所指的数据(也就是0x8FFF这个内存位置存放的数据)是常量,这个指针被称为常量指针
所以,有一种东西,叫做“常量指针常量”。就是说,一个常量中存着一个指针,这个指针又指向另外一个常量。

Pointer to Constant (常量指针/常指针)
特征:指针所指向的内容不可以通过指针的间接引用(*p)来改变。

const int x = 1;
const int* p1;
p1 = &x;        //指针p1类型是const int*
*p1 = 10;		//Error:表达式必须是可以修改的左值。

Pointer Constant (指针常量)
指针常量”的含义是:指针本身的内容是个常量,不可以改变

int x = 1, y = 1;
int* const p2 = &x;     //常量p2的类型是(int *)
*p2 = 10;               //okay->x=10
p2 = &y;                //Error:p2是一个常量:表达式必须是可以修改的左值。

小结
从左往右看,先看到 * 即为常量指针,先看到const 即为指针常量。
const int * x
int * const y
在这里插入图片描述
问题:请你尝试解释下面代码中的 pp 是个什么东西?

int x = 0, * const px = &x;
const int* const &pp = px;

引用。px的别名,px是指针常量,pp是常指针常量

3、Usage of using, typedef, and #define

1、#define是预处理指示符,用来定义宏,编译器不做检查
2、typedef 创建能在任何位置
C++11中为 using 关键字赋予了一个类型声明的新功能

using ConstPointer = const unsigned long int *;
ConstPointer p;ConstPointer q;ConstPointer r;
using UInt = unsigned int;
UInt x = 42u;
//表明这是一个指向函数的指针,它是一个类型
using FuncType = void(*) (int,int);
void example(int,int) {}
//f是变量
FuncType f = example;
//这里的using替代typedef =>等同于typedef void (*FuncType) (int,int);

这里的using是为了解决类型别名的问题。
之前我们遇到过这样的语句:

using std::cin;

表明将std空间的cin标识符引入到当前的程序里面来。cin是一个对象而不是一个类型。
所以如果我们这么写:

using in = std::cin;

编译器会报错。
using与typedef的区别
typedef是把类型放在前面,而简写的别名放在后面
如:typedef 类型 简写的别名;
using用法:
using 简写的类型别名 = 类型;
这样类似于赋值的语法很直观。
using的写法比typedef的写法更加直观,所以,我们应尽量使用using声明新类型名。而且当涉及到模版类型名时,只能使用using。
编码规范:
Names representing types must be in mixed case starting with upper case.
代表类型的名字必须首字母大写并且其它字母大小写混合

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/378045.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

斯威夫特山地车_斯威夫特| 两个数字相加的程序

斯威夫特山地车In this program, we will have an idea - how two numbers can be added and displayed as the output on the screen? 在此程序中,我们将有一个想法- 如何将两个数字相加并显示为屏幕上的输出 ? Open XCode terminal and type the fol…

四、色彩空间

一、色彩空间 1、什么是色彩空间? 色彩空间是定义的颜色范围。 2、常见的色彩空间有哪些? ①RGB ②HSV 在OpenCV中,Hue的值为0~180,之所以不是360是因为,8位存不下,故进行归一化操作,使得H…

Oracle LOB 详解

一. 官方说明Oracle 11gR2 文档:LOB Storagehttp://download.oracle.com/docs/cd/E11882_01/appdev.112/e18294/adlob_tables.htm#ADLOB45267Oracle 10gR2 文档:LOBs in Tableshttp://download.oracle.com/docs/cd/B19306_01/appdev.102/b14249/adlob_t…

FIFA的完整形式是什么?

国际足联:国际足球联合会 (FIFA: Federation Internationale de Football Association) FIFA is an abbreviation of the "Federation Internationale de Football Association" in French. It is also known as the International Federation of Associa…

POJ 1654 Area

题意:从原点出发,沿着8个方向走,每次走1个点格或者根号2个点格的距离,最终回到原点,求围住的多边形面积。分析:直接记录所经过的点,然后计算多边形面积。注意,不用先保存所有的点&am…

【C++ grammar】重载、内联、变量作用域、带默认参数的函数

目录1、变量的作用域1. 变量的作用域分类2. Unary Scope Resolution (一元作用域解析运算符)2、重载函数3、带有默认参数值的函数4、重载函数 VS 带有默认参数值的函数5、内联函数(Inline Function)1. 普通函数的优缺点2. 使用内联函数3. 定义内联函数4.…

五、像素运算

一、相关概念 1、算术运算 Ⅰ加减乘除 Ⅱ调节亮度 Ⅲ调整对比度 2、逻辑运算 Ⅰ与或非 Ⅱ遮罩层控制 二、图像算术运算(加减乘除均值方差) 其中图像的加减乘除需要保证两张图像的大小相同 import cv2 import numpy as npdef add(src1,src2):dst cv2.add(src1,src2)cv2.im…

创建bootstrap项目_使用Bootstrap创建第一个网页

创建bootstrap项目使用Bootstrap创建第一个网页 (Create First Webpage with Bootstrap) In the previous article, we learned "how to setup bootstrap?" for a web project. If you haven’t gone through that, it is recommended to read it. Now, in this art…

Chaikin Curve(球面插值)

在两条折线间完成平滑的过渡是 用画布做UI 或者做类似地图编辑器一类的工作的 很常见的任务。 怎么样化方为圆是决定工作效率的很重要的因素。(当需要编辑的曲线多起来, 复杂起来的时候,这会是件相当繁重的工作) 最容易想到的莫非…

【2020 电设G题 图像题解】

博主联系方式: QQ:1540984562 QQ交流群:892023501 群里会有往届的smarters和电赛选手,群里也会不时分享一些有用的资料,有问题可以在群里多问问。 2022.3.10新增订阅通知 近期把此专栏设置为了付费模式,可以直接花9.9买这个专栏,买了就可以直接这个专栏的所有文章了。后…

六、ROI和泛洪填充

一、ROI ROI:region of interest,即感兴趣区域。 一般主要通过numpy来获取ROI 将某区域转变为灰色图片再覆盖原图像 import cv2 import numpy as npsrc cv2.imread(r"G:\Juptyer_workspace\study\opencv\opencv3\a1.jpg") cv2.imshow(&quo…

VS2005 there is no source code available for the current location 解决方案

1.首先试最常规的方法:Clean and then rebuild solution,但是没有解决 2.进入Tools>Options,选择Debugging>General 却掉 Enable address-level debugging 选项,在去掉 Require source files to exactly match the original version. O…

django 静态数据_如何在Django中使用静态数据?

django 静态数据Static Data means those data items that we cannot want to change, we want to use them as it is like audio, video, images, files etc. 静态数据是指我们不想更改的数据项,我们想像音频,视频,图像,文件等那…

Leetcode226. 翻转二叉树(递归、迭代、层序三种解法)

目录题目1、层序法:2、递归法:1、先序遍历(中左右)2、后序遍历(左右中)3、递归中序遍历为什么不行(左中右)3、迭代法:1、先序遍历2、中序遍历3、后序遍历为什么迭代法的中…

Asp.net 获取当前目录的三种方法

方法一: string sPath System.IO.Path.GetDirectoryName(Page.Request.PhysicalPath) 方法二: string sPath System.Web.HttpContext.Current.Request.MapPath("/") 方法三: string s…

一款jQuery立体感动态下拉导航菜单特效

一款jQuery立体感动态下拉导航菜单特效,鼠标经过,在菜单栏上方下拉出一个背景图片,效果十分不错的一款jquery特效。 对IE6都是兼容的,希望大家好好研究研究。 适用浏览器:IE6、IE7、IE8、360、FireFox、Chrome、Safari、Opera、傲…

七、模糊操作

一、模糊操作基本原理 1,基于离散卷积 2,定义好每一个卷积核 3,不同卷积核得到不同的卷积效果 4,模糊是卷积的一种表象 二、1*3卷积核举例 每次右移一格,进行对应相乘再求和。1*3的卷积核左右两边的元素并没有处理而…

LeetCode 100. 相同的树 思考分析

给定两个二叉树,编写一个函数来检验它们是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入: 1 1 / \ / 2 3 2 3 [1,2,3], [1,2,3]输出: true 示例 2: 输入: 1 1 / 2 2 [1,2], [1,null,2]输…

在Python中以二进制格式输入数字

Syntax to convert binary value to an integer (decimal format), 将二进制值转换为整数(十进制格式)的语法, int(bin_value, 2)Here, 这里, bin_value should contain the valid binary value bin_value应该包含有效的二进制值 2 is the base value …

八、边缘保留滤波(EPF)

一、概念 边缘保留滤波(EPF,edge preserving filtering) 二、高斯双边 cv2.bilateralFilter(image,0,100,15)100为差异,15为周围的区域 import cv2 import numpy as npdef bilateralFilter(image):dst cv2.bilateralFilter(image,0,100,15)cv2.imshow(bilater…