初识c++之指针/引用和内存地址

本文仅从本人认知的角度来看待和描述指针/内存和引用, 是不太正规个人笔记, 欢迎留言讨论交流.

取内存地址

&变量名

1
2
int a = 100;
cout << &a << endl;

引用

int *变量 = &被引用变量

——- 等同 ——-

int *变量;

变量 = &被引用变量

1
2
3
4
5
6
7
int a = 100;
int *b = &a;
cout << a << endl;
cout << *b << endl;
*b = 80;
cout << a << endl;
cout << *b << endl;
1
2
3
4
100
100
80
80

结果相同, 无论a*b谁的值改变了, 都会同步. 因为*b指向a的内存地址

*b 是int指针类型, 它指向a

解引用

变量*b引用变量a, 变量**c引用&b变量. 解两次**c才能得到a的内存地址

1
2
3
4
5
6
int a = 100;
int *b = &a;
int **c = &b; //引用&b, 解两次引用
cout << a << endl;
cout << *b << endl;
cout << **c << endl;
1
2
3
100
100
100

申请内存

int *a = new int;

1
2
3
4
5
int main() {
int *a = new int;
*a = 666;
return 0;
}

这种做法是错误的, 申请的内存需要自己处理释放. 否则会造成内存泄漏引起程序崩溃等问题. 请看下例

释放内存 (释放堆中内存空间)

delete 指针变量名;

(上例中, 申请内存使用后不释放. 会造成内存泄漏)

1
2
3
4
5
6
int main() {
int *a = new int;
*a = 666;
delete a;
return 0;
}