C++ 经典案例1例

2023-10-31 14:51:57 浏览数 (1)

案例

代码语言: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 中两种不同的机制,用于处理变量的别名和内存地址。

  1. 引用(Reference):
  • 引用是变量的别名,通过使用&符号来声明引用。
  • 引用必须在声明时初始化,并且一旦初始化后,它将一直引用同一个变量。
  • 引用在使用时不需要使用*符号进行解引用,直接使用引用名即可访问原始变量。
  • 引用不能为null,必须引用一个有效的对象。
  • 引用可以被用作函数参数,可以通过引用来修改原始变量的值。
  • 引用不能改变引用的目标,即不能改变它引用的变量。
  1. 指针(Pointer):
  • 指针是一个变量,它存储了一个变量的内存地址。
  • 指针通过使用*符号来声明,并且必须在声明时初始化为一个有效的内存地址或者为null。
  • 指针可以通过解引用运算符*来访问指针指向的变量的值。
  • 指针可以为null,表示它没有指向任何有效的对象。
  • 指针可以被重新赋值来指向不同的对象。
  • 指针可以用作函数参数,可以通过指针来修改原始变量的值。
  • 指针可以通过算术运算进行指针的移动。

总结:

  • 引用是变量的别名,指针是存储变量内存地址的变量。
  • 引用必须在声明时初始化,指针可以在任何时候进行初始化。
  • 引用不能为null,指针可以为null。
  • 引用不能改变引用的目标,指针可以通过重新赋值来指向不同的对象。
  • 引用使用起来更加简洁,而指针更加灵活。

0 人点赞