本文主要说一说在C++中的指针、地址、引用等。适用于小白菜鸟。
指针与地址
首先来了解指针与地址,参见如下代码:
int main() {
int num = 7;
int *p = #
cout << num << "-" << p << "-" << *p << endl;
num = 8;
cout << num << "-" << p << "-" << *p << endl;
*p = 9;
cout << num << "-" << p << "-" << *p << endl;
int a = 11;
p = &a;
cout << num << "-" << p << "-" << *p << endl;
return 0;
}
上面的代码输出为:
7-0x61fe44-7
8-0x61fe44-8
9-0x61fe44-9
9-0x61fe40-11
第一行定义整形变量num=7,第二行将num变量的地址(&num)赋值给指针p(*p).
此处不可直接用p接收&num,也不能*p接收num。可以这样理解:&是对地址的封箱——返回的是地址,*表示我要指向这个地址。
接下来是对num和p的赋值,在给指针赋值时,需要使用*p,解析引用p对其地址上所存的值进行赋值,称为解引用。
小结一下:&num表示返回地址,*p表示:1)指针p;2)解引用.
引用
引用的示例代码如下:
int main() {
int num = 7;
int &q = num;
cout << num << "-" << q << "-" << &q << endl;
q = 8;
cout << num << "-" << q << "-" << &q << endl;
return 0;
}
输出结果:
7-7-0x61fe44
8-8-0x61fe44
从上面的指针与地址部分,我们了解到&num返回的是num的地址。在本例中&q表示q的地址,将num赋值给&q,表示将num的地址赋值给q。则此时num和q指向同一个地址。注意:此处不牵扯任何指针的知识。此时给q赋值8,则num也会跟着变。
指针的指针
int main() {
int val = 7;
int *p = &val;//val的地址赋值给指针p,即指针p指向val的地址
int *q = p;//指针p赋值给指针q
int **p2 = &p;//**声明一个指向指针的指针
cout << *p << "-" << **p2 << "-" << *q << endl;
return 0;
}
输出:
7-7-7
总结
- *符号 一定 是在左边;
- 带*初始化的变量,右边可以是以下情况:
- 右边为单变量名时,该变量表示指针;
- 右边为&变量名时,表示将右边变量名的地址给左边;
- 右边一定不能是直接的new对象或者数字等直接的值。
- 带&初始化的变量,右边只能是
基本引用
。即不含指针,也不能是直接的new对象或者数字等直接的值。
如有不对,欢迎指正!
网友评论