在不同的gcc版本中,函式傳入指標,在函式執行結束後列印指標指向值會有不同嗎?

時間 2021-06-28 19:34:52

1樓:SPeak

int*plusOne

(int

*digits

,int

digitsSize

,int

*returnSize

)// c

int*

plusOne

(int

*digits

,int

digitsSize

,int**

returnSize

)// cpp

int*

plusOne

(int

*digits

,int

digitsSize

,int*&

returnSize

)1.plusOne函式的returnSize是區域性變數存在棧中,當函式結束時就會消失

2.注意指標變數也是變數在記憶體中有儲存他的記憶體單元因此也有他們各自的位址。plusOne函式中的returnSize不是 main 中的 returnSize (你可以列印他們的位址看看)

3.由於plusOne函式中的returnSize是區域性變數函式結束則生命週期結束後丟失了動態分配的記憶體的位址資訊從而造成記憶體洩露

// 給int *起個別名,就容易看出他是區域性變數了

typedef

int*

int_ptr

;// 1. 先定義乙個別名

int*

plusOne

(int

*digits

,int

digitsSize

,int_ptr

returnSize

)// 這樣就可以實現儲存函式中動態分配記憶體的位址, 並且別名展開就是上面給的 c 的實現

int*

plusOne

(int

*digits

,int

digitsSize

,int_ptr

*returnSize

)// 如:swap交換兩個指標變數的內容的分析

int*a;

int*b;

C++:函式呼叫修改實參的值與函式引數引用、指標傳遞方式的簡單分析

c 中 不同 namespace 的變數及函式查詢是怎樣設計的?

能找到test是由於test含有乙個型別S1的引數,所以會在S1所在的命名空間中尋找函式test。這種查詢方式叫做Argument dependent lookup或者Koenig lookup。Argument dependent lookupThese function names are lo...

在python中的randrange函式和uniform函式的區別是什麼?

無關風月 函式簽名說的已經比較清楚了啊 In 7 random.randrange?Signature random.randrange start,stop None,step 1,int maxwidth 9007199254740992L Docstring Choose a random i...

在C 中如何實現復合多個函式的高階函式

guohc FuncCombinator的引數不固定所以只能傳入delegate的陣列。static void Main string args static Func FuncCombinator Delegate da TResult result TResult param return re...