int*與(int*)的區別,int區別

來源:互聯網
上載者:User

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看成指標了
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.