關於 GetMemory解釋,短但精闢

2021-07-26 19:24:07 字數 823 閱讀 6875

不廢話就兩個函式乙個是錯的,乙個是修改過的都解釋一下

void

getmemory(

char

*p)  

void

test1(

void

)    

形參不能改變實參所以p還是指向的空這是最扯淡的解釋,往深里想為什麼形參改變不了實參,這是因為她只是拷貝了實參的乙個副本  。所以當你傳指標的時候雖然改變了形參,但是你只是改變了形參所指向的東西,形參是沒變化的,所以實參也是沒變化的。打個比喻,就是乙個盒子  他傳給形參時,他會再建立乙個盒子,但是這只是複製盒子的形狀和外觀,我改變的是盒子裡面的東西,所以你們看到感覺這兩個盒子裡面的東西是一眼的其實不是。。。

void

getmemory2(

char

**p, 

intnum)  

void

test(

void

)    

那麼二級指標為什麼可以呢

來理解一下二級指標

int **p;就表示乙個指向指標的指標 如果對p第一次取值,那麼取出來的值肯定是乙個一級指標(也就是一級指標的位址)所以有*p=malloc(sizeof) 也就是說把申請這塊記憶體的位址(值)給了一級指標(一級指標也相當於乙個值是*p),這時候雖然沒改變實參的值但是一級指標已經指向了malloc所申請的記憶體啦

再打個比喻就,就是實參和形參相當於2個相同的房子。每個房子裡面都有個盒子,然後呢我*p=

(char

*)malloc(num);這就表示 吧盒子換了乙個新的。也就是一級指標的內容改變了。雖然我二級指標還是沒改變但是我已經改變了一級指標(就是那個盒子)

幾個關於GetMemory的經典問題

test1 void getmemory1 char p void test1 void 呼叫getmemory str 後,str並未產生變化,依然是null。改變的只是str的乙個拷貝的記憶體的變化 strcpy str,hello world 程式執行到這將產生錯誤。test2 char ge...

Getmemory的幾個經典的關於記憶體的筆試題

面試c 程式設計師時用得著的幾道題 getmemory的幾個經典的關於記憶體的筆試題 void getmemory1 char p void test1 void str一直是空,程式崩潰 char getmemory2 void void test2 void char getmemory3 vo...

ajax 短輪詢 關於ajax的短輪詢問題

利用前台的ajax不斷向後台伺服器請求,後台伺服器不斷檢視資料庫裡的資訊是否變化。若變化將資訊返回前台,並執行一些操作 前台ajax 注意要加上cache這一項,如果是post請求的化,可以免了。不然的化會一直從快取中找資料,不能及時更新。function ink success function ...