int*與(int*)的區別,int區別
晚上被問到一個C++的問題:
int **pa=new int* [5];
int *pb=new (int*)[5];
上面兩行代碼的區別是什嗎?
分析與實驗結果如下:
(1)第一行代碼可以在VS2010上正常運行,new出來的是一個存放int型指標變數的數組,可以存放5個這樣的元素。
而第二行代碼則編譯錯誤,悲劇的是VS2010在編譯之前並未紅線提示錯誤。
(2)設計了如下兩行代碼,其中第一行正常,第二行提示錯誤,未定義的pbb標識符,推測加括弧後未體現類型的作用,故pbb仍未定義。
int* paa[5];
(int*) pbb[5];
(3)經過第二步,基本確定(int*)不再是類型,而是將某對象進行強制類型轉換。
在查閱操作符優先順序的過程中,發現new的優先順序要低於類型轉換操作符的優先順序,故更加確定原問題第二行代碼的(int*)會優先執行,不再是int*類型。
int &n與int *n有什不同,int* &n是什
int *n;說明n是一個指向整數型變數的指標;
一般用法:
int *n;
int m;
m = 100;
n = &m;
這樣n就是一個指向m變數的整數型指標,修改*n相當於修改m
int &n;說明n是一個整數型變數的別名,定義&n必需要進行初始化,否則編譯報錯。
一般用法:
int m[10];
int &n = m[3];
這樣n就是m數組第三個變數的一個別名,操作n相當於操作m[3],m[3]和n的物理地址是重合的,只是稱呼名稱不一樣。
int *&n;說明n是一個整數型指標的別名;
一般用法:
int m = 100;
int *d = &m;
int *&n = d;
*n = 99; // 為m和*d賦值為99
d是一個指向m的整數型指標,n是d的另外一個操作別名;
int* a與int *a有不同?
沒有任何區別,都表示a是int指標
建議這麼寫int *a;這樣明顯一點
理由如下
int *a,b;
a是指標,b是整形,一幕瞭然
但是你如果寫成int* a,b;
雖然a還是指標,b還是整形
但是a前面沒直接跟*,一不留神,還真把b看成指標了