對指標交換的討論

來源:互聯網
上載者:User

 //本程式用來測試幾種交換兩個指標的指向的方法,其中方法二和方法四是可行的
#include<iostream>
using std::cout;
using std::endl;
void  swappoint1(int *p1,int *p2)  //方法一:傳值和傳地址的區別要看你對實參的那個形式進行操作
{   int *temp=p1;   //如果你對*p1和* p2進行操作的話,沒有改變p1和 p2的指向,只是改變的是他們
 p1=p2;         //所指儲存區的值,此時看成是傳指標哈。但是如果對p1和p2進行操作,因為p1和p2
    p2=temp;       //本身是儲存區的地址,可以看成是傳值的形式,此時不能改變p1和p2的指向。
}                  //相信方法一是大多人都錯誤做法哈    

void  swappoint2(int*&p1,int * &p2) //方法二:採用指標的引用作為實參,那麼傳的就是指標本身的地址
{    int *temp=p1;   //即傳的是左值,可以改變實參的地址和值,那麼對p1和p2的操作就可以改變它們的
  p1=p2;          //指向,所以方法二有效 
     p2=temp;
}

void  swappoint3(int**p1,int **p2)//方法三:採用指標的指標作為實參,這樣的話,但是對與p1與p2進行
{
 int ** temp=p1;              //操作來說,同方法一的解釋,此時看成傳值,故不能改變p1和p2的指向
 p1=p2;                       //故方法三是錯誤的
 p2=temp;
}

void swappoint4(int **p1,int **p2)//方法四:採用指標的指標作為實參,與方法三相反,此時對*p1和*p2的
{                                 //操作是對** 的下層操作,看成是傳指標哈,所以是有效
 int *temp=*p1;
 *p1=*p2;
 *p2=temp;
}

 
void main()
{
int a=1,b=2;
int *p1=&a,*p2=&b;
int **q1=&p1,**q2=&p2;
cout<<"用swappoint1函數交換兩個指標之前的值:/n"<<"*p1="<<*p1<<"/n"<<"*p="<<*p2<<"/na="<<a<<"/nb="<<b<<endl;
swappoint1(p1,p2);
cout<<"用swappoint1函數交換兩個指標之後的值:/n"<<"*p1="<<*p1<<"/n"<<"*p="<<*p2<<"/na="<<a<<"/nb="<<b<<endl;
cout<<"用swappoint2函數交換兩個指標之前的值:/n"<<"*p1="<<*p1<<"/n"<<"*p="<<*p2<<"/na="<<a<<"/nb="<<b<<endl;
swappoint2(p1,p2);
cout<<"用swappoint2函數交換兩個指標之後的值:/n"<<"*p1="<<*p1<<"/n"<<"*p="<<*p2<<"/na="<<a<<"/nb="<<b<<endl;
cout<<"用swappoint3函數交換兩個指標之前的值:/n"<<"*p1="<<*p1<<"/n"<<"*p="<<*p2<<"/na="<<a<<"/nb="<<b<<endl;
swappoint3(q1,q2);
cout<<"用swappoint3函數交換兩個指標之後的值:/n"<<"*p1="<<*p1<<"/n"<<"*p="<<*p2<<"/na="<<a<<"/nb="<<b<<endl;
cout<<"用swappoint4函數交換兩個指標之前的值:/n"<<"*p1="<<*p1<<"/n"<<"*p="<<*p2<<"/na="<<a<<"/nb="<<b<<endl;
swappoint4(q1,q2);
cout<<"用swappoint4函數交換兩個指標之後的值:/n"<<"*p1="<<*p1<<"/n"<<"*p="<<*p2<<"/na="<<a<<"/nb="<<b<<endl;
}

//但是如果只要改變兩個指標所指的儲存區的值的話,對於方法一:可以對*p1和*p2操作,結果是改變a與b的值
//對與方法三:可以對**p1和**p2進行操作,結果是改變了a 與b 的值。
//而本程式的目的是改變指標的指向來交換值,但是a與b本身的值並沒有改變。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.