zoukankan      html  css  js  c++  java
  • 交换两个元素的值

    交换两个元素的值,有传指针和传引用两种方式,这里需要注意的是引用一旦定义必须赋值,一旦赋值不能更改,对象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 }

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

  • 相关阅读:
    几个可以用到的正则表达式
    apache fileupload 文件上传,及文件进度设置获取
    Log4j日志根据配置输出到多个自定义文件
    spring3.2.2 remoting HTTP invoker 实现方式
    希望自己坚持住!
    tomcat线程一直处于RUNNABLE,不接受请求
    OM—>AR相关会计科目
    css画图
    Jquery 实现原理之 Ajax
    HTML、XHTML和HTML5区别与联系
  • 原文地址:https://www.cnblogs.com/rain-lei/p/3577785.html
Copyright © 2011-2022 走看看