C語言中二級指針的應用小結
1. 二級指針概念介紹
在介紹二級指針之前,首先介紹指針這個概念,在C語言中指針是用來指向其他數據類型的一種數據類型,比如char, int, double等類型,那么二級指針的概念就是指向指針的指針。
2. 二級指針應用場景
那么我們?yōu)槭裁匆褂枚壷羔樐兀@就牽扯到C語言最基本的兩種參數傳遞方式,值傳遞和地址傳遞,顧名思義,值傳遞是指我們將參數本身傳入函數,而地址傳遞則是將參數的地址傳入函數,而他們造成的效果是值傳遞無法改變參數實際值,而地址傳遞則可以改變參數實際值。
那如果是想在函數中修改參數的地址又該怎么辦呢,我們如果直接將地址傳入函數,效果和值傳遞的方式一致,函數的地址不會發(fā)生改變,因此我們需要將地址的地址傳入函數后即可成功改變地址值,那么我們就需要指針的指針,也就是二級指針,下面將舉例來說明二級指針的應用。
3.二級指針應用實例
我們這里寫一個函數來實現給指針分配固定大小內存。先看下面這段代碼。
錯誤代碼示范:
/*動態(tài)分配內存,每個單元占用num個字節(jié)*/
bool apply_memory(int *ptr, unsinged int num)
{
ptr = (int *)malloc(num * sizeof(char));
if(NULL == ptr)
{
return FALSE;
}
return TRUE;
}
/*測試函數*/
bool test_code(void)
{
int *ptr = NULL;
bool ret = apply_memory(ptr, 10);
if(TRUE == ret)
{
return TRUE;
}
return FALSE;
}這段代碼的本意是給傳入函數的指針動態(tài)分配內存,每個元素占用10個字節(jié)大小,但是這里犯了值傳遞的錯誤,導致指針ptr未被修改,因此想要修改ptr,應該傳入ptr的地址,正確用例如下。
/*動態(tài)分配內存,每個單元占用num個字節(jié)*/
bool apply_memory(int **ptr, unsinged int num)
{
*ptr = (int *)malloc(num * sizeof(char));
if(NULL == *ptr)
{
return FALSE;
}
return TRUE;
}
/*測試函數*/
bool test_code(void)
{
int *ptr = NULL;
bool ret = apply_memory(&ptr, 10);
if(TRUE == ret)
{
return TRUE;
}
return FALSE;
}4.二級指針總結
實際上二級指針的作用就是為了在函數當中修改一級指針指向的地址,同理,三級指針的作用也是在函數當中修改二級指針指向的地址。依次類推,如果在函數當中想修改某個參數(變量或者地址),就必須傳入參數的地址才能夠實現。
到此這篇關于C語言中二級指針的應用小結的文章就介紹到這了,更多相關C語言 二級指針內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

