zoukankan      html  css  js  c++  java
  • 指针作为参数传递

    如果想通过函数调用得到n个要改变的值,可以采取下面的步骤:
        ①在主调函数中设n个变量,用n个指针变量指向它们;
      ②编写被调用函数,其形参为n个指针变量,这些形参指针变量应当与主调函数中的n个指针变量具有相同的基类型;
      ③在主调函数中将n个指针变量作实参,将它们的值(是地址值)传给所调用函数的n个形参指针变量,这样,形参指针变量也指向这n个变量;
      ④通过形参指针变量的指向,改变该n个变量的值;
      ⑤在主调函数中就可以使用这些改变了值的变量。
    例如:

    #include <iostream>
    #include <windows.h>
    using namespace std;
    void swap1(int *a,int *b);
    void swap2(int *a,int *b);
    void main(){
    int a=10,b=20,c,*p1,*p2;
    p1=&a;
    p2=&b;
    cout<<DWORD(&(*p1))<<endl;//取得是指针变量p1的地址
    cout<<DWORD(&(*p2))<<endl;
    cout<<" p1= "<<*p1<<" - " <<DWORD(&(*p1)) <<" p2="<<*p2<<" - " <<DWORD(&(*p2)) <<endl;//&(*p1)取得是指针变量p1所指向存储单元即a的地址
    swap2(p1,p2);
    cout<<" p1= "<<*p1<<" - " <<DWORD(&(*p1)) <<" p2="<<*p2<<" - " <<DWORD(&(*p2)) <<endl;
    c=getchar();
    }

    //实参指针变量的地址没有改变,只是修改了指针变量所指向存储单元的值。
    void swap2(int *a,int *b){
    int temp;
    temp=*a;//取形参指针所指向变量的值,然后进行交换
    *a=*b;
    *b=temp;
    }
    //运行结果:
    // 2031340
    // 2031328
    // p1= 10 - 2031376 p2=20 - 2031364
    // p1= 20 - 2031376 p2=10 - 2031364

    请注意,不能企图通过改变形参指针变量的值而使实参指针变量的值改变。请分析下面程序:
    #include <iostream>

    using namespace std;
    int main( )
    { void swap(int *p1,int *p2);
    int *pointer_1,*pointer_2,a,b;
    cin>>a>>b;
    pointer_1=&a;
    pointer_2=&b;
    if(a<b) swap(pointer_1,pointer_2);
    cout<<″max=″<<a<<″ min=″<<b<<endl;
    return 0;
    }

    //调用函数时不会改变实参指针变量的值,但可以改变实参指针变量所指向变量的值。
    //简单说就是改变了p1所指向变量的值,即a的地址改变了,但是内容没有。
    void swap(int *p1,int *p2)
    { int *temp;
    temp=p1;
    p1=p2;
    p2=temp;
    }

  • 相关阅读:
    并发编程--锁--锁的理解及分类
    String -- 从源码剖析String类
    Spring 抽象的缓存包 spring-cache
    小白学做菜笔记
    使用Lists.partition切分性能优化
    String--常见面试题
    常用的Linux命令
    去除字符串中的空格
    微信小程序切换选中状态
    微信小程序面试题总结
  • 原文地址:https://www.cnblogs.com/lbangel/p/3178357.html
Copyright © 2011-2022 走看看