char*和char*&的區別


兩者都是把地址傳到函數中,都可以對傳入的指針指向的值進行修改。不同點*&還能改變指針的指向。
下面一段程序測試*&還能改變針的指向

#include<iostream>

struct point{
  //int x;
  //int y;
};
 
void changeNum1(point *&num_ptr){
  num_ptr = new point;
  std::cout<<"test1 changeNum1 -> new num_ptr` address"<<num_ptr<<std::endl;
  //num_ptr->x = 4;
 
}

void changeNum2(point *num_ptr){
  num_ptr = new point;
  std::cout<<"test2 changeNum2 -> new num_ptr` address"<<num_ptr<<std::endl;
 // num_ptr->x = 4;
 }

void test1(){
  point *num_ptr=new point;
  std::cout<<"test1 -> num_ptr` address"<<num_ptr<<std::endl;
  //num_ptr->x = 10;
  changeNum1(num_ptr);
  std::cout<<"test1 ->out of changeNum1: num_ptr` address"<<num_ptr<<std::endl;
  //std::cout<<num_ptr->x<<std::endl;
}

void test2(){
  point *num_ptr=new point;
  std::cout<<"test2 -> num_ptr` address"<<num_ptr<<std::endl;
 // num_ptr->x=10;
  changeNum2(num_ptr);
  std::cout<<"test2 ->out of changeNum2: num_ptr` address"<<num_ptr<<std::endl;
  //std::cout<<num_ptr->x<<std::endl;
}

int main(int argc, char** argv){
  test1();
  std::cout<<"-----------------------------"<<std::endl;
  test2();
}

運行結果

test1 -> num_ptr` address0x1cdac20
test1 changeNum1 -> new num_ptr` address0x1cdb050
test1 ->out of changeNum1: num_ptr` address0x1cdb050
---------------------
test2 -> num_ptr` address0x1cdb070
test2 changeNum2 -> new num_ptr` address0x1cdb090
test2 ->out of changeNum2: num_ptr` address0x1cdb070

從運行結果我們可以看出在changeNum1()中對指針num_ptr的改變並不能改變函數外的num_ptr指向。但是使用 point*& 傳入的,num_ptr可以改變函數外指針的指向。

參考地址

c++ char* char*&的區別


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM