• 交换两个元素的值


    交换两个元素的值,有传指针和传引用两种方式,这里需要注意的是引用一旦定义必须赋值,一旦赋值不能更改,对象a的引用就是a的别名(alias)。

    (1)int &a;//a是int类型的引用

    (2)int *a;//a是int类型的指针

    (3)int *&a;//a是int*类型的引用,也就是a是指针的引用

    可以用下面示意图解释

    第一种交换方式,传递引用,swap1(int &x, int &y);第二种方式,传递指针swap2(int *x, int *y),第三种方式传递指针引用swap3(int*(&x), int*(&y))。分别如下所示

                    

    可以看到第一、二种方式交换的是数值,第三种方式交换的是指针。

    附代码

     1 #include <stdio.h>
     2 
     3 
     4 void swap1(int &x, int &y)
     5 {
     6     int temp = x;
     7     x = y;
     8     y = temp;
     9 }
    10 
    11 void swap2(int *x, int *y)
    12 {
    13     int temp;
    14     temp = *x;
    15     *x = *y;
    16     *y = temp;
    17 }
    18 
    19 void swap3(int*(&x), int*(&y))
    20 {
    21     int *temp;
    22     temp = x;
    23     x = y;
    24     y = temp;
    25 }
    26 
    27 int main()
    28 {
    29     int a = 1, b = 2;
    30     swap1(a, b);
    31     printf("传入引用,a = %d, b = %d
    ", a, b);
    32     a = 1, b = 2;
    33     swap2(&a, &b);
    34     printf("传入指针,a = %d, b = %d
    ", a, b);
    35     a = 1, b = 2;
    36     int *i = &a;
    37     int *j = &b;
    38     printf("传入指针引用前,a = %d, b = %d
    ", a, b);
    39     printf("传入指针引用前,i = %d, i = %d
    ", *i, *j);
    40     swap3(i, j);
    41     printf("传入指针引用后,a = %d, b = %d
    ", a, b);
    42     printf("传入指针引用后,i = %d, i = %d
    ", *i, *j);
    43 
    44     scanf("%d", &a);
    45     return 0;
    46 }

    运行结果,与前图分析的完全相同

  • 相关阅读:
    js 和 jquery的宽高
    client、offset、scroll
    web开发中会话跟踪的方法有哪些
    前端需要注意哪些SEO
    ES6 Set和Map数据结构
    ES6实现数组去重
    ES6 Symbol
    ES6对象的拓展
    ES6数组的拓展
    ES6函数的拓展
  • 原文地址:https://www.cnblogs.com/rain-lei/p/3577785.html
Copyright © 2020-2023  润新知