跨函式使用記憶體 指標常見問題

2021-10-18 10:49:19 字數 1152 閱讀 3491

#include

#include

voidf1(

int*q)

intmain()

執行結果:

分析:(靜態)

main函式中:p 指向 i 的位址,所以,*p = i;

呼叫 f1 函式時,q 拷貝了 p 的內容即 i 的位址,故 *q = *p = i;

所以 i 的值改變了。

#include

#include

voidf2(

int*q)

intmain()

執行結果:

i=5, *p=5

*q_old=5

*q_new=15

i=5, *p=5

分析:(動態)

main函式中:p指向i的位址,所以,*p = i;

呼叫 f2 函式時,q拷貝了p的內容即 i 的位址,所以 q 也指向 i,故 *q = *p = i;

但是,f2函式中,q又指向了一段動態空間而不再指向 i,此時 *q 只會引起動態空間內容的變化;

所以 *q 的值前後發生了變化,而 i 和 *p 的值不變。

#include

#include

voidf3(

int*

*q)int

main()

執行結果:

i=5, *p=5

**q_old=5

**q_new=10

i=5 , *p=10

分析:(動態)

main函式中:p指向i的位址,所以,*p = i;

呼叫 f3 函式時,q指向p(二級指標q儲存了p的位址),所以 *q = p,**q = i;

在f3函式中,*q 指向了一段動態記憶體,即 p也指向那段動態記憶體而不再指向主函式中的 i,

此時 **q=10就相當於 *p = 10 ;

所以函式呼叫結束後,*p 的值發生了變化,而 i 的值未改變。

指標常見問題

1.指標是什麼?指標是變數,所以指標有變數的特性 a.系統為指標分配記憶體空間 b.指標有自己的 位址 c.指標能夠存值,但這個值比較特殊 位址。2.指標的型別和指標所指向的型別 指標的型別 把指標宣告語句中指標名字去掉,剩下的部分即為這個指標的型別 指標所指向的型別 把指標宣告語句中的指標名字和名...

跨域常見問題

這裡要說的是,跨域的幾個場景 1 ajax跨域 ajax跨域跟前端沒有什麼關係,只是後端伺服器的安全限制,但也可在前端處理。常見的處理方式分為 1 前端處理 通過jsonp的方式,這裡不細講。大概的思路是,借助標籤不存在跨域的 bug 模擬向另乙個服務發請求 2 後端處理 有幾種方式 2 ifram...

C 指標篇之 記憶體跨函式使用問題

1 靜態變數不能跨函式使用 靜態變數系統是固定分配記憶體的屬於靜態記憶體,一旦該函式使用結束所有靜態變數記憶體空間都會重置釋放,相當於清零 例如下面這段 語法上並沒有報錯,編譯器也能執行出來,但是邏輯上是不對的 當fun 函式使用結束後,其函式內部由系統自動分配的靜態變數p和i記憶體空間會釋放,所以...