内蒙古建设厅网站,珠海网站建设公,济南房产网安居客,深圳沙井网站建设目录1、常量 #xff08;Constant#xff09;2、指针#xff08;Pointer#xff09;3、Usage of using, typedef, and #define1、常量 #xff08;Constant#xff09;
常量是程序中一块数据#xff0c;这个数据一旦声明后就不能被修改了。
如果这块数据有一个名字Constant2、指针Pointer3、Usage of using, typedef, and #define1、常量 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 x5;
const int* p x;
p y; //不会报错
*(p) y; //报错解释由于x是个常量所以它的值不可以被改变也就是说地址不能修改也就是说p存的地址是个常量所以要加const。p可以指向其他变量
int x5;
int* const p x; 解释p指针是个常量它不能指向其他变量了。但是它指向的数据x是可以改变值的。
const int x5;
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-x10
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 创建能在任何位置 C11中为 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. 代表类型的名字必须首字母大写并且其它字母大小写混合