2017-03-18 62 views
-1

我有點困惑與指針。指針指向哪個數據類型?

說,如果我有這樣的:

int size; 
int bytes; 
int numbers; 
int *ptr; 

ptr = new int[500]; 

我的問題是在第一點的任何特定變量或只是整體INT變量的指針。如果我想要一個只能指向數字變量的指針,該怎麼辦?

我有一個尾巴的問題,如果你不介意。我想分配動態內存給我的數組,這是有效的嗎? :

int numbers[20]; 
int *ptr; 
ptr = new int[size]; 

這會給我的數組堆內存嗎?

我非常大的大小的數組,並且沒有其他辦法與它合作,而無需使用堆內存。

P.S:此時我不能使用向量。

+0

要理解指針,請考慮指針是指程序存在於實際RAM中的引用。像C這樣的經典強類型語言要求運行時在內存中的所有變量都是鍵入的。因此,例如,可以爲32位整數類型預留一個4字節的內存塊。爲了適當的讀取,寫入和使用,內容大小和類型必須在編譯期間以靜態方式直接標識。它看起來像你的任務不會使用堆內存,而是被視爲一個正常的數組。閱讀有關malloc()的文檔以進行動態分配。 –

回答

1

int *ptr是一個指針,指向一個int變量。不管什麼變量,只要它是一個int,所以你可以有以下幾點。

int size; 
int bytes; 
int numbers; 
int *ptr; 

ptr = &size; 
ptr = &bytes; 
ptr = &numbers; 

我使用&符號,因爲它給變量而不是它的價值的實際地址。指針只能存儲變量的地址。

如果再要使用該指針指向,你需要尊重它的實際價值,像這樣

int number = 5; 
int *ptr; 
ptr = &number; 
cout << *ptr; 
//5 

至於你的第二個問題。是的,這會給你一個指向堆上數組的有效指針。

欲瞭解更多信息,我建議查找一個數組實際是什麼,因爲你可能會困惑爲什麼你不需要使用&符號時分配一個指針指向一個數組。

0

int *ptr未初始化,所以它實際指向的「垃圾值」或在這種情況下,隨機內存地址。退房Uninitialized pointers in code

如果你想int *ptr指向數字的值,你應該先初始化int numbers,因爲這可能會導致Undefined behavior如果您嘗試取消對它的引用。

您可以通過使用Address-of運算符&來分配等於numbers的ptr。然後使用解引用運算符*來獲取ptr的值。

numbers = 4; 
ptr = &numbers; 
cout << *ptr << endl; 

這將打印4

+0

指向未初始化的變量不會導致任何「未定義的行爲」,除非您嘗試對其進行取消引用。 –

+0

@AlexLop。謝謝。編輯。 –

+0

仍然,在指向它之前,不必初始化變量... –

0
int arNumbers[20]; 

從堆棧中給你內存,而不是動態的,編譯器會負責釋放內存。

int *pNumbers = new int[20]; 

給你的內存從堆和是動態的,你需要刪除它,當你完成:

delete[] pNumbers; 

如果你需要20個電話號碼,其中一人是不夠的。