-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreferTest.cpp
More file actions
44 lines (38 loc) · 1.71 KB
/
referTest.cpp
File metadata and controls
44 lines (38 loc) · 1.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/*
引用&:引用类型的变量在声明的同时必须初始化。
引用只能在声明的时候被赋值,以后都不能再重新赋值。
如:
int a=10;
int &b=a;
表示b是a的别名,两个共用一个内存地址,所以对b的任何修改就等价于对a的修改。
int c=29;
int &b=c; //错误,b已经是a的别名,不能再给其他变量当别名。
指针在被赋值的时候一定要初始化,不然就是野指针。
指针的引用:给指针取别名。
如 int a=10;
int *p=&a; //指针p指向a的地址。p等于&a,
int* &q=p; //q相当于指针p的别名,值:*q=*p=a, 地址:p=q=&a=*&q, &p=&q.
引用和指针的区别:
1. 引用在创建的时候必须初始化,且只能是一个变量的别名,只能引用其他变量一次。
指针在定义的时候可以不初始化,可以多次重新赋值。
2. 不存在NULL引用,引用不能指向空值,指针可以是NULL。
3. 综上,可以得知,引用比指针安全,效率更高。
复杂指针的声明:
1. 一个指向指针的指针,它指向的指针是指向一个整形数的, int **a;
2. 一个有10个指针的数组,该指针是指向一个整形数的。 int* a[10];
3. 一个指向有10个整形数数组的指针, int (*a)[10];
4. 指向函数的指针, 该函数有一个参数并返回一个整形数。 int (*a)(int);
5. 一个有10个指针的数组, 该指针指向一个函数,有一个整形参数和返回一个整数。 int (* a[10])(int);
*/
#include <iostream>
using namespace std;
int main(){
int a=10;
int b=23;
int *i=&a;
int *&p=i;
cout<<a<<" "<<*i<<" "<<*p<<endl;
cout<<&a<<" "<<i<<" "<<p<<" "<<endl;
cout<<&i<<" "<<&p<<" "<<*&p<<endl;
return 0;
}