程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++指針作為函數的參數進行傳遞時注意的問題

C++指針作為函數的參數進行傳遞時注意的問題

編輯:C++入門知識

應注意問題:
當指針作為函數的參數進行傳遞的時候,本質上還是進行的“值傳遞”,也就是復制了一個新的指向該地址的指針變量。

只有在被調函數中,對指針進行引用操作,才可以達到不需要返回值,就對指針指向的變量做出相應的變化。

下面分析這樣兩個例子;

要求:定義並初始化兩個字符串變量,並執行輸出操作;然後調用函數使這兩個變量的值交換,並且要求被調函數的傳值通過傳遞指針來實現。

程序1.1

[cpp]
#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; 

#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;
}
輸出結果:

 

\

程序1.2

[cpp]
#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; 

#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;
}
輸出結果:

 \
 


分析:
通過這兩個程序的結果對比,程序1.1中的函數沒有達到交換數值的目的,而程序1.2達到了;

因為,在主函數中,主函數把str1和str2的首元素的地址,作為實參傳遞給了函數Exchange函數;Exchange函數中的,p1用於接收str1的地址,p2用於接收str2的地址,這個過程是進行了值傳遞。

在程序1.1中,只是指針p1和指針p2的值進行了交換,對原來的字符串str1和str2並沒有什麼影響;而在程序1.2中,是*p1和*p2的值進行了交換,而*p1就是str1它本身,*p2就是str2它本身,所以實際上是str1和str2進行了交換

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved