2010-07-10 67 views
2

我想知道C和C++中的指針 - 它如何幫助節省內存?我搜查了但沒有得到滿意的答案。請幫助我。C/C++指針幫助

+7

請問您是否可以重新提出您的問題 - 因爲它使我感到害怕或沒有意義。 – 2010-07-10 15:27:53

+2

指針不存在以節省內存。他們讓語言更具表現力,所以你可以做一些本來不可能的事情。 – jalf 2010-07-10 15:56:16

+12

我想知道我車裏的方向盤。它如何幫助節省燃氣?我搜查了但我沒有得到滿意的答案。請幫助我。 – 2010-07-10 15:57:29

回答

4

如果比較的代碼下面兩段:

foo() { 
    large_struct x; 
    bar(x); 
} 
bar(large_struct x) { 
    //do some funny things 
} 

foo() { 
    large_struct* x; 
    bar(x); 
} 
bar(large_struct* x) { 
    //do some funny things 
} 

在第一片,大結構x被在存儲器中複製,而在第二代碼段只是一個指針被複制到內存中。這是點,當你可以用指針節省內存。

+1

幾乎完美。你應該提到,當函數退出時,釋放的內存(在第一個例子中)將被釋放,因爲它被分配在堆棧上。所以,內存將只保存在堆棧級別。 – Poni 2010-07-10 15:38:33

+0

哦,當然是:) – levu 2010-07-10 15:45:52

+0

我們可以操作struct x的值,它會作爲指針傳遞到foo()中。 然而,在第一種情況下,它不會。 – 2010-07-10 15:56:15

2

不確定你究竟在做什麼,但是......存儲指針比存儲它指向的對象的整個副本的內存少。

1

除了其他人所說的,指針是必要的動態內存分配(這也適用於更高級別的語言,但是(通常)被抽象掉)。這意味着如果沒有指針,你只能使用(通常相當小的)堆棧內存,這更需要保護。

0

指針基本上用於指向內存中的位置。指針的類型指的是它指向的內存類型(通常),例如:一個char *(字符指針指向一個內含字符的內存),這個指針的「類型」也與它有很大關係指針運算,例如:如果將一個整數添加到指針名稱中,地址將會產生多少跳轉字節。

在C++中,您可以使用new運算符在運行時聲明系統內存。這種類型的內存稱爲動態內存,應該明確刪除。指針表示法用於指向使用「new」運算符分配的此類內存。例如:

char * a = new char; 

char * a = new char[10] 

這種存儲器必須使用刪除關鍵字 例如被刪除或返回到該系統:

delete a; 

delete [] a; 

它是se作爲一名來自我們的C++程序員的實踐,他們傾向於忘記刪除這種聲稱的內存,因此託管語言應運而生。最受歡迎的是Java,C#和託管C++(C++ CLI)。 (看來,我可以寫一篇關於什麼指針的完整篇文章,但我試圖指出你的問題)。

我希望你能滿意我的答案。 我希望這可以幫助