簡體   English   中英

了解指針C ++

[英]understanding pointers c++

當我編寫此代碼時:

Animal *p;
Animal b;
p = &b;

在我創建指針的第一行。 是創建動物的新對象還是僅在編寫第二行時創建?

謝謝。

當您聲明一個指針[並且該聲明是一個定義]時,僅為一個指針分配空間,沒有創建Animal對象。

如果不初始化指針,則不能以任何方式使用它,除非將其指向有效的Animal對象或為其分配特殊的“空指針值”以指示指針未指向有效的對象。 您甚至無法測試它是否實際上指向了有效的Animal對象。

始終建議在創建指針后立即將其初始化為null或有效對象,因此,我建議:

Animal* p = 0; // or = NULL
Animal u;
p = &u;

或更好:

Animal u;
Animal* p = &u;

在第一行中,創建了一個指針,但是它還沒有指向任何東西。 在第二行中,創建一個實際的Animal對象。

Animal *p; 創建一個指針, Animal b; 創造動物。

當創建該方法時,將在堆棧上創建一個新對象,並在該方法返回時消失。 如果您從方法中返回該值並嘗試使用它,則將導致應用程序崩潰,因為堆棧存儲器將作為從方法中返回的一部分而被重新分配。

// create a pointer to an animal object and initialize it to NULL
//Animal* p; // Bad!  Do not do this
Animal* pA = NULL; // Much better

Animal a; // creates an Animal object on the stack (local scope)

Animal pA = &a; // sets pA to point to the location of a

現在,當a超出范圍時, pA仍將指向該內存位置。 如果您嘗試訪問它,則可能會(並且將)發生壞事。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM