日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

指针引用(转载)

發布時間:2025/4/5 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 指针引用(转载) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ?在做項目時,用到第三方的API:RequestService( string *reqst, string *&Rsp)
? ? ? 怎么來調用這個API呢?由于對指針的使用不熟悉,分別作了如下嘗試:
(1)想當然,把2個參數都當作普通的指針:
string input="Help Me"; string output; RequestService( &input, &output) error: no matching function for call to ‘RequestService(string *,string*)’ note: candidates are: virtual int RequestService(string*, string*&)?
(2)把第二個參數當成指向指針的指針
string input="Help Me"; string *output = NULL; RequestService( &input, &output) error: no matching function for call to ‘RequestService(string *,string**)’ note: candidates are: virtual int RequestService(string*, string*&)? ? ? 可以看到,由于對指針和引用得不熟悉,連編譯都過不了。
? ? ? 可見,在C++和C語言的編程中,理解指針是多么重要!
? ? ? 本文旨在拋磚引玉,著重探討與前面例子相關的:指向指針的引用。
? ? ? 其實,函數:RequestService( string *reqst, string *&Rsp)的第一個參數是普通的指針類型,第二個參數Rsp是一個指向指針的引用 。因此,調用時,第一個參數傳遞參數地址就行,而第二個參數則需要傳遞一個指針變量給它。即正確調用方法為:
string input="Help Me"; string *output = NULL; RequestService( &input, output) ? ? 這樣,就可以編譯通過了。
? ? ?指向指針的引用是某一指針的別名,同變量的引用一樣。引用絕對不是單獨存在的,它一定是指示某個已經存在的東西的,它一定是某個已經存在的物體的"別名". ?
? 而且它如果被初始化賦值成某個變量后,它就始終是這個變量的替身.對引用的改變就是對這個變量的改變. ?
指向指針的引用的特殊點在于如下兩點:
(1)指向指針的引用,不僅改變了指針所指的對象,也改變了指針本身。
? ? ? ? 為了方便讀者的理解,我們看兩種情況,代碼稍有不同。
第一種情況:只有普通的引用,
第二種情況,使用了指向指針的引用。

??

(2)指向指針的引用,可以實現對傳遞給形參的實參數值的交換。即指向指針的引用可以修改指針的值,在參數傳遞時是傳址。

#include <iostream>using namespace std;void ptrswap2(int *&v1,int *&v2)//指向指針的引用是某一指針的別名,同變量的引用一樣,可以實現對傳遞給形參的實參數值的交換 { int *temp=v2;//指針別名,當然以指針的形式來應用 v2=v1; v1=temp; } void ptrswap1(int *v1,int *v2)//利用指針進行數值交換,改變的只是形參的指向,實參的值保持不變; { int *temp=v2; v2=v1; v1=temp; } int main() { int i=10; int j=20; int *pi=&i; int *pj=&j; cout<<"before: pi="<<*pi<<" pj="<<*pj<<endl; ptrswap1(pi,pj); //ptrswap1(&i,&j); //會編譯出錯,一定要傳個指針才行cout<<"after:"<<" pi="<<*pi<<" pj="<<*pj<<endl; cout<<"i = "<<i<<"j="<<j<<endl;//值沒有變int i2=10; int j2=20; int *pi2=&i2; int *pj2=&j2; cout<<"before: pi2="<<*pi2<<" pj2="<<*pj2<<endl; ptrswap2(pi2,pj2); //ptrswap2(&i2,&j2); //會編譯出錯,一定要傳個指針才行cout<<"after: pi2="<<*pi2<<" pj2="<<*pj2<<endl; cout<<"i = "<<i<<"j="<<j<<endl;//值沒有變,變的只是傳入指針的值return 0; }



?

總結

以上是生活随笔為你收集整理的指针引用(转载)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。