1.關於變數的記憶體開闢問題
比如下面的例子:
int i=5; //這個變數i的空間應該是在棧上,不需要手動釋放
int *k = new int(5) //這個變數k的空間應該是在堆上開闢, 不用了的時候需要手動釋放.
上面是我對定義乙個整型變數的兩種方式的理解, 不知道有沒有錯誤?
但是關於struct/class 這種型別的記憶體開闢問題我還是很糊塗.
我知道關於鍊錶之類的動態的結構,記憶體開闢是必須用new /alloc等在堆上進行.但是普通的struct/class 呢? 比如說下面兩種不同的方式
方式1:
struct test
; test *testobj = new test();
testobj-> a =1;
testobj-> b =2;
方式2:
struct anothertest
; anothertest anothertestobj;
anothertestobj.a=1;
anothertestobj.b=2;
問題: 1: 方式2這種定義方法有沒有問題?是不是在棧上分配記憶體? 如果該struct/class很大,超出了棧的大小怎麼辦?
2. 如果上面的方式2的寫法沒有問題, 如果struct/class中有動態指標(比如鍊錶)的成員,是不是這樣寫就會有問題?
3.方式1和方式2的區別?
int *k = new int(5);
指標變數 k 的空間在棧上, 在32位機器上指標變數大小4位元組
指標變數k所儲存的4位元組位址所指向到空間在堆上,型別為 int 大小為 4 * sizeof(int);
a:方式1在在棧上分配乙個test型指標變數.只占用棧4個位元組(如果是在32位機的情況下^_^).這個變數指向乙個在堆中分配的test型結構體.所以在程式結束時如果不顯式的delete testobj.那麼這個在棧中的指標變數雖然被自動刪除.但為其在堆中分配的test結構並沒有被銷毀.記憶體於是洩漏...
方式2在棧上分配乙個anothertest變數.這個變數佔棧的大小為sizeof(anothertest)個位元組.和堆沒有關係.所以這個變數所占用的棧空間在程式結束時會被自動刪除.
2.指標與陣列的問題
C 基礎性問題
解決方案 專案 類之間的關係 乙個解決方案可以包含多個專案 乙個專案可以包含多個類 解決方案 公司 專案 部門 類 員工 sln 解決方案檔案,裡面包含著整個解決方案的資訊,可以雙擊執行。csproj 裡面包含著這個專案的資訊,可以雙擊執行。命名空間 namespace 可以使用using關鍵字引入...
C 常用基礎性問題集錦
1 首先將被引用的專案的輸出為類庫。方法 選中被要被引用的專案,右鍵,選擇 屬性 頁,在通用屬性的常規頁面中,將輸出型別修改為 類庫 即可 2 在需要引用的專案中,新增引用。開啟引用對話方塊,選擇 專案 頁,開啟 瀏覽 對話方塊,選擇在上一步生成的動態鏈結庫 在此步之前需要現將被引用的 專案先編譯一...
一些基礎性的問題
以下近日在培訓講座中討論的一些問題,雖然有的很基礎,但留作朋友們參考 1.如果一定要實現多個可選引數,是否有變通的機制 實際上換乙個思路來說還是回到了方法過載的情況 void somemethod double inputs,params int inputs2 void somemethod pa...