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;
    }

  • 相关阅读:
    JavaScript DOM API初步(整理)
    MySQL与Oracle之间互相拷贝数据的Java程序
    MySQL与Oracle的区别之我见
    js原生:封装document.getElementByClassName()函数
    js和jquery获取父级元素、子级元素、兄弟元素的方法
    封装bt轮播图淡入淡出效果样式
    Bootstrap每天必学之导航条
    全面解析Bootstrap图片轮播效果
    JS如何获取页面可见区域高度
    怎样才能成为优秀的前端工程师
  • 原文地址:https://www.cnblogs.com/lbangel/p/3178357.html
Copyright © 2011-2022 走看看