C 程式棧空間的使用問題不是很理解

時間 2022-02-22 21:35:18

1樓:

這是典型的位址引用和值引用的區別,通俗地講就是乙個傳位址,乙個傳值。

傳位址的函式對位址指向的內容做處理,那麼該位址指的東西就變了,所以不需要返回值;

而傳值函式僅對數值處理,也就是對別的位址處理,需要有返回值。

somefn這個函式就是傳位址的。

2樓:匿名使用者

看了一下,這個例子是要說明不能返回區域性變數的位址(就是那個警告),而跟somefn返回什麼沒有關係。你要了解一下棧空間的問題。

ps:在genin裡面int value是分配在棧空間的位址(比如位址是0xa),函式退出的時候你把這個位址返回給了pr,直接使用這個位址0xa的時候(*pr)並未重新使用棧空間前還是有值的(20),但是當你呼叫somefn的時候,執行了int a=40,會分配棧空間來儲存a的值,這個時候棧空間變化了,你的原來位址0xa隨之改變了;所以跟你什麼somefn傳入什麼或者有沒有影響指標都沒有關係,主要是他使用了棧空間,使棧發生了變化

關於c++中棧的問題,總是不懂

3樓:風龍一

所謂棧 等資料結構都不是系統自帶的資料型別 是抽象資料型別(adt) 它們再邏輯上可以形象地理解 比如棧就是後進先出 類似籮筐 但實現它還是要物理上得以實現 這就要你自己寫該結構的屬性(資料) 和方法(操作)了

所謂定義乙個棧就是定義了乙個類

tpyedef class stack

其中包括陣列s存放資料 然後乙個 int l 表示棧頂 再定義各個操作等等 邏輯上講是乙個資料結構 實際上就是乙個class 樓主理解了吧? 你自己寫的類當然不能算系統的保留字 自然就沒有反色等顯示了

4樓:匿名使用者

定義乙個棧後,還要定義它的輸入輸出函式,系統不會把它當棧處理,而是自己定義函式,如定義push函式為進棧,pop函式為出棧。

學習棧的時候,可以看書上的程式示例,不一定要用指標,用陣列也可以實現

一般書本上會有棧的輸入輸出函式示例

5樓:匿名使用者

棧和堆都是抽象資料型別,也就是一種資料結構,在程式語言中是不存在這種基本型別的。抽象資料型的功能也是自己定義的.你要在程式中使用乙個棧,也就是說要自己定義乙個結構/類,能夠完全的符合棧/堆的定義

6樓:匿名使用者

棧只是乙個抽象的資料結構型別,還要自己定義的,只是這個資料型別用的很廣泛,所以幾乎說到「棧」,都會想到stack,一些基本的pop,push等功能也就是約定俗成的了

至於邊顏色是只有c++內部的關鍵字才會變,棧是自己定義的,所以不會變色

資料結構很有用,好好學習吧

c++ 這樣子是在使用棧空間嗎

7樓:匿名使用者

才不是呢,queue 和 vector ,string deque stack 什麼的 ,都是stl的組成部分,和棧有毛關係..

下面的才是

內用棧(stack)

下面是容用堆(heap):

8樓:匿名使用者

有**嗎?我怎麼沒看到**?

c++中,使用new的意義?為什麼要使用堆? 這樣做的意義是什麼,使用棧不是更好? 在何種情況下使

9樓:匿名使用者

使用new的意義是申請堆空間(heap)中的記憶體。

heap比起棧空間(stack)的優勢在於容量巨大,通常乙個程式的stack空間的大小都只有2m左右,具體數值取決於編譯器。

使用heap需要手動釋放記憶體,但是隨時可以釋放,使用stack必須等到生命週期結束才會釋放記憶體。

對於生命周期短且占用空間小的變數,如函式中的區域性變數,用stack。對於占用空間大的,採用heap。熟悉了c++之後自然就分得清什麼時候該用什麼。

比起stack,heap能有更大的容量,並且能更好地被程式設計師操縱。

關於c++程式設計棧的問題,程式如下

10樓:

什麼問題啊?

模板類一般要求所有實現**都定義在同乙個檔案中,要使用模板的分離編譯模式要使用export關鍵字, 但現在主流編譯器都不支援。

c/c++程式設計問題,用棧方法實現記憶體的申請和釋放?

11樓:

動態的記憶體是從heap,也就是堆裡分配,需要程式裡顯式釋放

stack(棧)裡的記憶體是自動分配釋放的

你的問題太籠統,把要求寫的具體一些

12樓:匿名使用者

你可以在函式建構函式裡面使用關鍵字new分配記憶體,並且在析構函式的時候使用delete關鍵字

13樓:

每申請乙個就入堆疊,堆疊內的記憶體不釋放

需要使用的時候,從堆疊pop,使用完畢,看一下能否歸還,如果能歸還,則入棧,否則釋放掉

14樓:匿名使用者

題目有點不太明白。

//g_freebuf 為乙個記憶體塊陣列,也就是你要用的棧,g_top記錄了棧頂位置

byte *memget() //記憶體申請

void memfree(byte *p) //記憶體釋放

15樓:匿名使用者

分配記憶體:

在棧記憶體中存放了乙個指向一塊堆記憶體的指標p。程式會先確定在堆中分配記憶體的大小,然後呼叫 operator new分配記憶體,然後返回這塊記憶體的首位址,放入棧中。

int a = 0; //全域性初始化區

char *p1; //全域性未初始化區

int main()

程式結束後會自動釋放

16樓:小小de煙圈

先知道概念,c++動態生成的空間都是在棧中,例如 int *a = new int; 分配乙個int型的空間,位址值賦給a,這個空間是動態生成,所以是棧空間,還有區域性變數也是;

靜態的空間是堆,例如全域性變數

int a;//全域性變數

int fun()

int main()

總之,當程式中函式執行完就釋放的空間是棧,區域性變數;當程式執行完再釋放的空間是堆,全域性的

17樓:恐怖的肖恩

出現這種狀況多出在硬體上,你判斷的還是對的,我以前遇到過這種情況,最後是檢查主機板,結果主機板的幾個電容壞掉了,換幾個就好了,很便宜。診斷卡不能查出宕機的原因,只能查出有問題的硬體,希望可以幫到你。

18樓:五五開

哦那不是呼叫malloc和free()嗎你如果 要例題 追加 我給你

19樓:匿名使用者

親,《演算法導論》或者《計算機演算法設計與分析》裡有完整詳細的敘述!!

c 名稱空間的問題,c 名稱空間問題 書上說 全域性名稱空間是預設的名稱空間,在顯示聲名的名稱空間之外聲名的識別符號都在

彭珂的課堂 c 007 標頭檔案和std名稱空間 上 c 名稱空間問題 書上說 全域性名稱空間是預設的名稱空間,在顯示聲名的名稱空間之外聲名的識別符號都在 1 所有名字都在全域性名稱空間中。2 外部變數,可以 表示來表示與區域性變數的區別。3 一切名稱空間和類函式等,都在全域性名空間中。所以其他名稱...

編寫C源程式,其中包含順序表示的空棧的建立 判斷棧是否為

1,如何斷棧是否為空 c 中 stack 類的count 屬性 返回就是堆疊的長度。system.collections.stack stack new system.collections.stack stack.push 1 if 0 stack.count messagebox.show 堆疊...

C盤空間不足的問題,一個C盤空間不足的問題

把軟體裝在其他盤,把c盤的一部分程式的資料夾剪下到其他盤 在桌面上的快捷方式可能用不了了,你再從移到的盤裡面弄一個快捷方式就行了 你不防試試將軟體安裝在其他的盤裡這樣就可以騰出很多地方了,就是因為你c盤裝的東西太多了所以才這樣,你可以在其他盤建一個資料夾專門來裝軟體非常方便 你可以克隆c盤,然後備份...