1、型別&變數名,表示引用。
2、資料&資料,表示按位相與。
3、&變數名,表示位址。
區分的地方:
1)引用在賦值=的左邊,而取位址在賦值的右邊,比如
int a=3;
int &b=a; //引用
int *p=&a; //取位址
2)和型別在一起的是引用,和變數在一起的是取址。 舉例同樣如上,還有下例:
int function(int &i)
//引用
由於自己不太能理解指標變數的引用
1.在可以用引用的情況下,不要用指標;
2.引用不允許重新賦值.,當使用乙個變數指向不同的物件時,必須用指標;
3.引用不允許為空,當存在物件為空時,必須使用指標。
下面的可以好好體會體會,那麼你將會受益匪淺的哦!
(1) double & rr=1; 等價與 double temp; temp=double(1); double & rr=temp;
(2) int *a; int * & p=a; int b=8; p=&b; //正確,指標變數的引用(由於自己不太能理解
指標變數的引用)
void & a=3; //不正確,沒有變數或物件的型別是void
int & ri=null; //不正確,有空指標,無空引用
(3) int & ra=int; //不正確,不能用型別來初始化
int *p=new int; int & r=*p; //正確
(4) 引用不同於一般變數,下面型別宣告是非法的:
int &b[3]; //不能建立引用陣列
int & *p; //不能建立指向引用的指標
int &&r; //不能建立引用的引用
(5) 當使用&運算子取乙個引用的位址時,其值為所引用變數的位址,
1 **
#include using namespace std;
void freeptr1(int* p1)
void freeptr2(int*& p2)
void main()
思考:在freeptr1和freeptr2 的比較中,你能發現它們的不同點嗎?
2 對**進行解釋
#include using namespace std;
void freeptr1(int* p1)
void freeptr2(int*& p2)
void main()
3 指標引用的經典用法
#include using namespace std;
void all1(int **p)
void all2(int*& p)
void main()
{ int *a1;
all1(&a1);
*a1 = 1;
cout<<*a1<
java this 三種用法
public class thisdemo class student override public string tostring 列印結果 student name null,age 0 賦值沒有成功,說明 name 區域性變數 name 區域性變數 而不是name 成員變數 name 區域性...
c new三種用法
前幾天去家公司面試,有一道這樣的題 寫出c 中new關鍵字的三種用法,思前想後挖空心思也只想出了兩種用法,回來查了下msdn,還真是有第三種用法 用於在泛型宣告中約束可能用作型別引數的引數的型別,這是在framework 2.0 中定義泛行時才會使用到的,自己對c 2.0 中的支援還只是粗通皮毛,怪...
c using 三種用法
1.using指令。using 命名空間名字,這樣可以在程式中直接用命令空間中的型別,而不必指定型別的詳細命名空間。這個功能也是最常用的,幾乎每個cs的程式都會用到。例如 using system 一般都會出現在 cs中。2.using別名。using 別名 包括詳細命名空間資訊的具體的型別。這種做...