char*和char*&的區別
阿新 • • 發佈:2020-08-12
兩者都是把地址傳到函式中,都可以對傳入的指標指向的值進行修改。不同點*&
還能改變指標的指向。
下面一段程式測試*&
還能改變針的指向
#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
可以改變函式外指標的指向。