1. 程式人生 > 實用技巧 >char*和char*&的區別

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*&的區別