指標的用法
雙重指標的用法
2、指標一直都是C語言的靈魂,我們平常用得最多的是一維指標,而雙重指標用得相對較少,本文是對二維指標進行一個學習。
首先看一道習題:
char GetMemory(char *memorystr,u8 num)
{
memorystr = (char*)malloc(num);
}
int main(void)
{
char *str = NULL;
GetMemory(str,6);
memcpy(str,"china",5);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
請問上面程式碼,可以為str開闢一個空間並且把”china” 拷貝到其中嗎?
分析:
要了解這個問題,我們需要先了解函式呼叫的過程:
1)首先把實參的值賦給形參,然後把控制流轉到被呼叫函式。
2)執行被呼叫函式。
注意形參改變是不會影響到實參的值。我們再分析GetMemory(str,6),實參是一個空指標str,形參為memorystr,呼叫時,把str賦給memorystr,然後執行memorystr = (char*)malloc(num);,這時候 memorystr獲得了6個char空間,但是因為形參改變不會影響到實參的值,str的值並沒改變,還是NULL,所以上面拷貝不成功。
我們根據下圖來說明:
ps: 我們平常使用指標把引數從函式中傳遞出來,傳遞的是指標所指向的內容,而非指標本身,而上的例子企圖改變的是指標本身。
如果例子想達到目的,該怎麼改呢? 我們可以使用雙重指標實現。所謂雙重指標,也稱為二維指標,宣告形式
型別名 **指標名, eg: char **p, 含義是指向指標的指標。
如下圖:
char **p = “123”:
1)首先申請了一個空間,我們假設地址為a,a地址內容是p,p是一個二級指標,指向以p為地址的空間,則其內容為*p。
2)*p時一個一級指標,指向以*p為地址的空間,該空間儲存的是”123”
3)引用二級指標,修改*p 的值就可以改變二級指標(**p)所指向的地址。通過函式引數形式修改指標地址,一般使用二級指標。
eg:
char **p =”123” , *a = “456”; *p = a; 這時候,**p指向的內容是“456”
根據這些知識,我們修改上面的例程,以實現其功能:
char GetMemory(char **memorystr,u8 num)// 使用二級指標
{
*memorystr = (char*)malloc(num);// 這裡是賦值給*memorystr
}
int main(void)
{
char *str = NULL;
GetMemory(&str,6);// 取str的地址
memcpy(str,"china",5);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
分析:
1、GetMemory(&str,6);// 取str的地址,賦給了二級指標memorystr, 那麼*memorystr就是取&str地址的內容,即str,兩者完全等價。如果*memorystr改變,那麼str也會改變。
2、*memorystr = (char*)malloc(num);// 申請num個char空間給*memorystr,也就是給str申請了num個char空間。
3、最後把字串copy到china 中
相關文章
- 智慧指標用法學習指標
- C語言指標用法大全C語言指標
- C++11智慧指標用法C++指標
- c++ 智慧指標用法詳解C++指標
- C++ 指標常見用法小結C++指標
- 【char* 字元指標的用法】及【輸出NULL的問題】字元指標Null
- 詳解c++指標的指標和指標的引用C++指標
- 指標常量和常量指標的區別指標
- Go 陣列指標(指向陣列的指標)Go陣列指標
- 指標的理解指標
- c++動態記憶體智慧指標及weak_ptr用法的理解C++記憶體指標
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- 陣列指標,指標陣列陣列指標
- 比如,一級指標、二級指標等,通過不同層級的指標資料指標
- 指標指標
- jmeter 的指標判定JMeter指標
- 【C++系列】指標物件和物件指標的區別C++指標物件
- 【原創】淺談指標(十三)指向陣列的指標指標陣列
- 指標函式 和 函式指標指標函式
- 指標陣列與陣列指標指標陣列
- 【C/C++】1.函式傳入指標加const的作用及用法區別C++函式指標
- 第 10 節:複合型別-5. 指標 -- 指標與指標變數 -8. 多級指標型別指標變數
- 指標還沒弄清楚?一篇文章搞定 “地址、指標、指標的指標、引用”,並附程式碼示例,建議收藏!指標
- C指標原理(15)-C指標基礎指標
- C指標原理(14)-C指標基礎指標
- 指標和標籤的基礎理解指標
- 字串指標的輸出字串指標
- 空指標的傳說指標
- C++中的this指標C++指標
- 指標-小泉的難題指標
- HCBOLL指標指標
- 雙指標指標
- 智慧指標指標
- C | 指標指標
- MACD指標Mac指標
- 姜指標指標
- GO 指標Go指標
- golang指標Golang指標