1. 定义和性质的区别:
- 指针是一个变量,它存储的是另一个变量的地址。引用则是给已有的变量提供一个别名。例如:
```cpp
int a = 1;
int *p = &a; // 指针p存储了变量a的地址
int &b = a; // 引用b是变量a的别名
```
- 存在const指针,但const引用是不允许的。
- 指针可以有多个级联,例如`int **p;`是合法的,但`int &&a`是非法的,因为引用只能有一个级别。
- 指针可以赋予空值(nullptr),而引用在定义时必须初始化,并且不能为nullptr。
- 指针的值可以改变,指向不同的内存单元,而引用在初始化后不可更改。
- `sizeof`引用得到的是所指向变量的尺寸,而`sizeof`指针得到的是指针本身的大小。
- 指针和引用的自增(++)运算意义不同。
2. 指针和引用作为函数参数传递时的区别:
- 当指针作为参数传递时,传递的是实参的地址。这意味着在函数内部对指针的操作会影响到实参。例如:
```cpp
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
```
上述函数通过指针交换了值,实参的值也会相应改变。
- 引用作为参数传递时,传递的是实参本身。这意味着在函数内部对引用的操作会直接影响到实参。例如:
```cpp
void test(int &a) {
cout << &a << " " << a << endl;
}
```
上述函数通过引用打印了实参的地址和值,对引用的操作会影响到实参。
以上内容对C++中指针和引用的区别进行了详细的解释,并且提供了函数参数传递时的例子来帮助理解这些概念。