2017-07-17 119 views
-4

我嘗試Ubuntu的終端概念在C指針不明確

int main() { 
    int y = 10; 
    int *int_ptr; 
    int_ptr = (int *) y; 
} 

我分配在program.I這些代碼想知道有關的步驟說明正確執行上面的代碼的代碼。在最後一行代碼中,如果它是int_ptr =&y; 我沒有問題,但與我的代碼我沒有得到我指向int_ptr指針。

+5

你明白'y'和'&y'的區別嗎? –

+4

閱讀一本關於'C'的好書 – dlmeetei

+1

我們不是老師,在線免費學習基礎C課程。 –

回答

4
int *int_ptr; 

int_ptr是指存儲int類型的變量的地址。 要獲取變量說的地址int t您需要使用&運算符。 但通過做你剛剛做的你剛剛分配的整數10到int_ptr

當你聲明變量說

int x = 34; 

有兩樣東西在作怪:

  • 說0x10000的是,其中x存儲地址;該地址通過&運營商獲得。
  • 和34是x的值。

要通過指針訪問x,您需要第一個值。

0

用最後一行,你分配給int_ptr地址0x0000000A。 因此,對於* int_ptr,您正在讀取地址存儲在0x0000000A處的內存塊。

0

發佈代碼時發生錯誤,但會投標(int *)正在遮罩它。

你應該好好y的地址,使int_ptry

int main(void) { 
    int y = 10; 
    int *int_ptr; 
    int_ptr = &y; 
} 

使用轉換,你是在告訴你知道你在做什麼,編譯器和真要到轉換值y作爲地址int存儲到int_ptr。如果沒有轉換,編譯器應該發出警告,告訴您可能發生的編程錯誤。