C与C++中的函数与指针

用用就知道多厉害了,墙裂推荐这个将C语言声明翻译成口语的翻译器:C语言声明翻译器--在线版对表达式声明的理解float f,g;当对其求值时,表达式f和g的类型为浮点数类型(float)。float ((f));当对其求值时,表达式((f))的类型为浮点数类型(float)。float ff();表
阅读更多

C++中引用、指针与const

const与引用

别名。一初始化,就必须指向某个对象,不能指向引用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int ival = 1024;
int &refVal = ival;
refVal = 1;
cout << "ival = " << ival << ", refVal = " << refVal << endl;

const int ci = 1024;
const int &r1 = ci;
// r1 = 42; 不能修改

const int r2 = ival;
// r2 = 2048; 不能通过r2修改ival


int i = 1024;
int *p = &i;
int *&refVal2 = p; // refVal2是一个引用,它引用的对象是一个指针,指向int类型。
cout << *refVal2 << endl;

const与指针

指向常量的指针(pointer to const)

不能用于修改其所指对象的值,常量对象的指针,只能使用指向常量的指针

1
2
3
4
5
6
7
8
9
10
11
const double pi = 3.14;
//double *ptr = π 需要指向一个double常量
const double *cptr = π
//*cptr = 42; 不能通过此指针修改值
double dval = 3.14;
cptr = &dval;
//*cptr = 3.15; 不能通过此指针修改值
cout << *cptr << endl;

...
3.14

const指针

常量指针必须初始化,且初始化完成后,其值不能再改变,也就是说只能一直指向某一个地址。可以通过此指针改变所指向对象的值

1
2
3
4
5
6
7
8
 int errNumb = 0;
int *const curErr = &errNumb; // 只能指向errNumb
*curErr = 1; // 可修改所指向的对象
const double pi = 3.14159;

const double pi2 = 3.14159;
const double *const pip = π
//pip = &pi2; //❌pip的值不能修改

从右往左法则

const double *const pip = &pi为例,离pip最近的是const,说明pip本身的值不能改变,在往左,pip的类型是一个指针,说明pip是一个常量指针;在往左,说明pip是一个常量指针,它指向的对象是double类型;再往左,说明pip是一个常量指针,它指向的对象是一个double型常量的。