案例
代码语言:javascript复制#include <iostream>
void swapr(int & a, int & b); // a,b are aliases for ints
void swapp(int * p, int * q); // p,q
void swapv(int a, int b); // a,b are new variables
int main()
{
using namespace std;
int wallet1 = 300;
int wallet2 = 350;
cout << "wallet1 = $ " << wallet1;
cout << " wallet2 = $ " << wallet2 << endl;
cout << "Using references to swap contents:n";
swapr(wallet1, wallet2); // pass vvariables
cout << "wallet1 = $" << wallet1;
cout << " wallet2 = $" << wallet2 << endl;
cout << "Using pointers to swap contents again:n";
swapp(&wallet1, &wallet2); //pass address of variables
cout << "wallet1 = $" << wallet1;
cout << " wallet2 = $" << wallet2 << endl;
cout << "Trying to use passing by value:n";
swapv(wallet1, wallet2); // pass values of variables
cout << "wallet1 = $" << wallet1;
cout << " wallet2 = $" << wallet2 << endl;
return 0;
}
void swapr(int &a, int &b) // use references
{
int temp;
temp = a;
a = b;
b = temp;
}
void swapp(int *p, int *q) // use pointers
{
int temp;
temp = *p;
*p = * q;
*q = temp;
}
void swapv(int a, int b) // try using values
{
int temp;
temp = a;
a = b;
b = temp;
}
解释
这段代码演示了通过引用、指针和传值三种方式来交换两个变量的值。
首先,在代码中定义了三个函数:swapr、swapp和swapv,它们分别用于通过引用、指针和传值来交换变量的值。
在主函数中,创建了两个整型变量wallet1和wallet2,并分别赋值为300和350。
接下来,通过cout语句输出wallet1和wallet2的值。
然后,使用swapr函数通过引用来交换wallet1和wallet2的值,并使用cout语句输出交换后的值。
接着,使用swapp函数通过指针来交换wallet1和wallet2的值,并再次使用cout语句输出交换后的值。
最后,使用swapv函数通过传值来交换wallet1和wallet2的值,并再次使用cout语句输出交换后的值。
通过运行这段代码,你会看到通过引用和指针交换的结果是正确的,而通过传值交换的结果并不会影响原始的变量值。这段代码演示了通过引用、指针和传值三种方式来交换两个变量的值。
首先,在代码中定义了三个函数:swapr、swapp和swapv,它们分别用于通过引用、指针和传值来交换变量的值。
在主函数中,创建了两个整型变量wallet1和wallet2,并分别赋值为300和350。
接下来,通过cout语句输出wallet1和wallet2的值。
然后,使用swapr函数通过引用来交换wallet1和wallet2的值,并使用cout语句输出交换后的值。
接着,使用swapp函数通过指针来交换wallet1和wallet2的值,并再次使用cout语句输出交换后的值。
最后,使用swapv函数通过传值来交换wallet1和wallet2的值,并再次使用cout语句输出交换后的值。
通过运行这段代码,你会看到通过引用和指针交换的结果是正确的,而通过传值交换的结果并不会影响原始的变量值。
引用和指针的区别
引用和指针是C 中两种不同的机制,用于处理变量的别名和内存地址。
- 引用(Reference):
- 引用是变量的别名,通过使用&符号来声明引用。
- 引用必须在声明时初始化,并且一旦初始化后,它将一直引用同一个变量。
- 引用在使用时不需要使用*符号进行解引用,直接使用引用名即可访问原始变量。
- 引用不能为null,必须引用一个有效的对象。
- 引用可以被用作函数参数,可以通过引用来修改原始变量的值。
- 引用不能改变引用的目标,即不能改变它引用的变量。
- 指针(Pointer):
- 指针是一个变量,它存储了一个变量的内存地址。
- 指针通过使用*符号来声明,并且必须在声明时初始化为一个有效的内存地址或者为null。
- 指针可以通过解引用运算符*来访问指针指向的变量的值。
- 指针可以为null,表示它没有指向任何有效的对象。
- 指针可以被重新赋值来指向不同的对象。
- 指针可以用作函数参数,可以通过指针来修改原始变量的值。
- 指针可以通过算术运算进行指针的移动。
总结:
- 引用是变量的别名,指针是存储变量内存地址的变量。
- 引用必须在声明时初始化,指针可以在任何时候进行初始化。
- 引用不能为null,指针可以为null。
- 引用不能改变引用的目标,指针可以通过重新赋值来指向不同的对象。
- 引用使用起来更加简洁,而指针更加灵活。