C語(yǔ)言中二級(jí)指針的應(yīng)用小結(jié)
1. 二級(jí)指針概念介紹
在介紹二級(jí)指針之前,首先介紹指針這個(gè)概念,在C語(yǔ)言中指針是用來(lái)指向其他數(shù)據(jù)類(lèi)型的一種數(shù)據(jù)類(lèi)型,比如char, int, double等類(lèi)型,那么二級(jí)指針的概念就是指向指針的指針。
2. 二級(jí)指針應(yīng)用場(chǎng)景
那么我們?yōu)槭裁匆褂枚?jí)指針呢,這就牽扯到C語(yǔ)言最基本的兩種參數(shù)傳遞方式,值傳遞和地址傳遞,顧名思義,值傳遞是指我們將參數(shù)本身傳入函數(shù),而地址傳遞則是將參數(shù)的地址傳入函數(shù),而他們?cè)斐傻男Ч侵祩鬟f無(wú)法改變參數(shù)實(shí)際值,而地址傳遞則可以改變參數(shù)實(shí)際值。
那如果是想在函數(shù)中修改參數(shù)的地址又該怎么辦呢,我們?nèi)绻苯訉⒌刂穫魅牒瘮?shù),效果和值傳遞的方式一致,函數(shù)的地址不會(huì)發(fā)生改變,因此我們需要將地址的地址傳入函數(shù)后即可成功改變地址值,那么我們就需要指針的指針,也就是二級(jí)指針,下面將舉例來(lái)說(shuō)明二級(jí)指針的應(yīng)用。
3.二級(jí)指針應(yīng)用實(shí)例
我們這里寫(xiě)一個(gè)函數(shù)來(lái)實(shí)現(xiàn)給指針?lè)峙涔潭ù笮?nèi)存。先看下面這段代碼。
錯(cuò)誤代碼示范:
/*動(dòng)態(tài)分配內(nèi)存,每個(gè)單元占用num個(gè)字節(jié)*/
bool apply_memory(int *ptr, unsinged int num)
{
ptr = (int *)malloc(num * sizeof(char));
if(NULL == ptr)
{
return FALSE;
}
return TRUE;
}
/*測(cè)試函數(shù)*/
bool test_code(void)
{
int *ptr = NULL;
bool ret = apply_memory(ptr, 10);
if(TRUE == ret)
{
return TRUE;
}
return FALSE;
}這段代碼的本意是給傳入函數(shù)的指針動(dòng)態(tài)分配內(nèi)存,每個(gè)元素占用10個(gè)字節(jié)大小,但是這里犯了值傳遞的錯(cuò)誤,導(dǎo)致指針ptr未被修改,因此想要修改ptr,應(yīng)該傳入ptr的地址,正確用例如下。
/*動(dòng)態(tài)分配內(nèi)存,每個(gè)單元占用num個(gè)字節(jié)*/
bool apply_memory(int **ptr, unsinged int num)
{
*ptr = (int *)malloc(num * sizeof(char));
if(NULL == *ptr)
{
return FALSE;
}
return TRUE;
}
/*測(cè)試函數(shù)*/
bool test_code(void)
{
int *ptr = NULL;
bool ret = apply_memory(&ptr, 10);
if(TRUE == ret)
{
return TRUE;
}
return FALSE;
}4.二級(jí)指針總結(jié)
實(shí)際上二級(jí)指針的作用就是為了在函數(shù)當(dāng)中修改一級(jí)指針指向的地址,同理,三級(jí)指針的作用也是在函數(shù)當(dāng)中修改二級(jí)指針指向的地址。依次類(lèi)推,如果在函數(shù)當(dāng)中想修改某個(gè)參數(shù)(變量或者地址),就必須傳入?yún)?shù)的地址才能夠?qū)崿F(xiàn)。
到此這篇關(guān)于C語(yǔ)言中二級(jí)指針的應(yīng)用小結(jié)的文章就介紹到這了,更多相關(guān)C語(yǔ)言 二級(jí)指針內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實(shí)現(xiàn)不能被繼承的類(lèi)實(shí)例分析
這篇文章主要介紹了C++實(shí)現(xiàn)不能被繼承的類(lèi)實(shí)例分析,對(duì)于C++初學(xué)者而言可以通過(guò)本文實(shí)例更好的理解類(lèi)的原理及運(yùn)用,需要的朋友可以參考下2014-08-08
C語(yǔ)言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問(wèn)題解決
這篇文章主要介紹了C語(yǔ)言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問(wèn)題解決,文中的題目是將元素連接起來(lái)排成一個(gè)數(shù)并要求出這類(lèi)結(jié)果中數(shù)最小的一個(gè),需要的朋友可以參考下2016-03-03
VS2022連接sqlserver數(shù)據(jù)庫(kù)教程
本文主要介紹了VS2022連接sqlserver數(shù)據(jù)庫(kù)教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
C語(yǔ)言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)堆排序圖文示例
這篇文章主要為大家介紹了C語(yǔ)言植物大戰(zhàn)數(shù)據(jù)結(jié)構(gòu)堆排序的圖文示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
C++中字符串全排列算法及next_permutation原理詳解
這篇文章主要為大家詳細(xì)介紹了C++中字符串全排列(遞歸法)和(迭代法)以及next_permutation底層原理,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-02-02
c語(yǔ)言鏈表基本操作(帶有創(chuàng)建鏈表 刪除 打印 插入)
這篇文章主要介紹了c語(yǔ)言鏈表基本操作,大家參考使用吧2013-12-12
Linux下g++編譯與使用靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的方法
下面小編就為大家?guī)?lái)一篇Linux下g++編譯與使用靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05

