C C 基礎性問題 一

2021-04-14 00:49:22 字數 1296 閱讀 8868

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...