C++指針作為函數(shù)的參數(shù)進(jìn)行傳遞時(shí)需要注意的一些問(wèn)題
只有在被調(diào)函數(shù)中,對(duì)指針進(jìn)行引用操作,才可以達(dá)到不需要返回值,就對(duì)指針指向的變量做出相應(yīng)的變化。
下面分析這樣兩個(gè)例子;
要求:定義并初始化兩個(gè)字符串變量,并執(zhí)行輸出操作;然后調(diào)用函數(shù)使這兩個(gè)變量的值交換,并且要求被調(diào)函數(shù)的傳值通過(guò)傳遞指針來(lái)實(shí)現(xiàn)。
程序1.1
#include<iostream>
#include<string>
using namespace std;
int main(){
string str1="I love China!",str2="I love JiNan!";
void Exchange(string *p1,string *p2);
cout<<"str1: "<<str1<<endl;
cout<<"str2: "<<str2<<endl;
Exchange(&str1,&str2);
cout<<"str1: "<<str1<<endl;
cout<<"str2: "<<str2<<endl;
return 0;
}
void Exchange(string *p1,string *p2){
string *p3;
p3=p1;
p1=p2;
p2=p3;
}
輸出結(jié)果:
程序1.2
#include<iostream>
#include<string>
using namespace std;
int main(){
string str1="I love China!",str2="I love JiNan!";
void Exchange(string *p1,string *p2);
cout<<"str1: "<<str1<<endl;
cout<<"str2: "<<str2<<endl;
Exchange(&str1,&str2);
cout<<"str1: "<<str1<<endl;
cout<<"str2: "<<str2<<endl;
cout<<endl;
return 0;
}
void Exchange(string *p1,string *p2){
string p3;
p3=*p1;
*p1=*p2;
*p2=p3;
}
輸出結(jié)果:
分析:
通過(guò)這兩個(gè)程序的結(jié)果對(duì)比,程序1.1中的函數(shù)沒(méi)有達(dá)到交換數(shù)值的目的,而程序1.2達(dá)到了;
因?yàn)椋谥骱瘮?shù)中,主函數(shù)把str1和str2的首元素的地址,作為實(shí)參傳遞給了函數(shù)Exchange函數(shù);Exchange函數(shù)中的,p1用于接收str1的地址,p2用于接收str2的地址,這個(gè)過(guò)程是進(jìn)行了值傳遞。
在程序1.1中,只是指針p1和指針p2的值進(jìn)行了交換,對(duì)原來(lái)的字符串str1和str2并沒(méi)有什么影響;而在程序1.2中,是*p1和*p2的值進(jìn)行了交換,而*p1就是str1它本身,*p2就是str2它本身,所以實(shí)際上是str1和str2進(jìn)行了交換
相關(guān)文章
C++如何實(shí)現(xiàn)字符串的部分復(fù)制
這篇文章主要介紹了C++如何實(shí)現(xiàn)字符串的部分復(fù)制問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08簡(jiǎn)單談?wù)凜++ 頭文件系列之(bitset)
我們要使用bitset,首先需要包含頭文件bitset。和vector對(duì)象不一樣的是bitset類型對(duì)象的區(qū)別僅在其長(zhǎng)度而不在其類型。在定義bitset的時(shí)候,要明確bitset包含了多少位,須在尖括號(hào)內(nèi)給出它的長(zhǎng)度值。長(zhǎng)度值必須定義為整形字面值常量或是已用常量值初始化的整型的const對(duì)象2017-02-02劍指offer之C語(yǔ)言不修改數(shù)組找出重復(fù)的數(shù)字
今天小編就為大家分享一篇關(guān)于劍指offer之C語(yǔ)言不修改數(shù)組找出重復(fù)的數(shù)字,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-02-02C語(yǔ)言 二叉樹的鏈?zhǔn)酱鎯?chǔ)實(shí)例
本篇文章主要介紹C語(yǔ)言中二叉樹的鏈?zhǔn)酱鎯?chǔ),這里提供了一個(gè)實(shí)例代碼進(jìn)行參考,這樣對(duì)二叉樹的鏈?zhǔn)酱鎯?chǔ)有更深入的了解,希望能幫到學(xué)習(xí)這塊知識(shí)的同學(xué)2016-07-07C++修煉之構(gòu)造函數(shù)與析構(gòu)函數(shù)
本章節(jié)我們將學(xué)習(xí)類的6個(gè)默認(rèn)成員函數(shù)中的構(gòu)造函數(shù)與析構(gòu)函數(shù),并對(duì)比C語(yǔ)言階段的內(nèi)容來(lái)學(xué)習(xí)它們的各自的特性,感興趣的同學(xué)可以參考閱讀2023-03-03