




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第c語言中的二級指針做函數(shù)參數(shù)說明目錄二級指針做函數(shù)參數(shù)二級指針作為形參簡單實例分析實例一級指針二級指針做函數(shù)形參下面看看實例
二級指針做函數(shù)參數(shù)
1.用指針做函數(shù)參數(shù)申請動態(tài)內(nèi)存的問題
//如果函數(shù)參數(shù)是指針,不能用一級指針做函數(shù)參數(shù)實現(xiàn)申請動態(tài)內(nèi)存
voidgetMemory(char*p,intnum)
p=(char*)malloc(sizeof(char)*num);
voidmain()
char*str=NULL;
getMemory(str,20);
strcpy(str,"code");
coutstr;
system("pause");
}//出錯
//用二級指針為指針申請內(nèi)存,用二級指針做函數(shù)參數(shù)可以申請成功
voidgetMemory1(char**p,intnum)
*p=(char*)malloc(sizeof(char)*num);
voidmain()
char*str=NULL;
getMemory(str);
strcpy(str,"code");
coutstr;
system("pause");
}
2.二級指針做函數(shù)參數(shù)簡介修改變量的值
#includeiostream
usingnamespacestd;
structTeacher
charname[20];
intage;
intgetTeacher(Teacher**p)
Teacher*tmp=NULL;
if(p==NULL)
{
return-1;
}
if(tmp==NULL)
{
return-2;
}
tmp-age=23;
*p=tmp;//p是實參地址,*p間接修改實參的值
//用二級指針修改一級指針的值,用一級指針修改零級指針的值
voidFreeTeacher(Teacher*p)
if(p==NULL)
{
return;
}
free(p);
intmain()
Teacher*pt=NULL;
getTeacher(pt);
coutpt-ageendl;
FreeTeacher(pt);
system("pause");
return0;
}
二級指針作為形參簡單實例分析
指針是什么?指針是程序數(shù)據(jù)在內(nèi)存中的地址,而指針變量是用來保存這些地址的變量。
舉例
intc=2,d=3;
int*pc=
pc是指針變量的存儲內(nèi)容,也就是c的地址
*pc就是對指針的解引用,取出這個c這個地址里面的值
實例
#includestdio.h
intc=2,d=3;
int*pc=//一級指針指向c
int**ppc=//二級指針指向一級指針pc(指向指針的指針)
intmain()
//一級指針*p指向c
printf("一級指針*p指向c\n\n");
printf("c的地址=%pc的地址\n",
printf("pc的值=%ppc中指向的就是C的地址\n",pc);
printf("*pc的值=%d對c的地址進行取值*pc==2;\n",*pc);
putchar('\n');
printf("-------------------------------------------------------------\n");
//二級指針(指針的指針)**ppc指向*pc
printf("二級指針(指針的指針)**ppc指向*pc\n\n");
printf("pc的地址=%p一級指針pc的地址\n",pc);
printf("ppc的值=%p二級指針ppc指向的地址其實就是一級指針pc的地址\n",ppc);
printf("*ppc的值=%p對ppc進行一次解引用,*ppc==pc,*ppc也就是c的地址\n",*ppc);
printf("*(*ppc)的值=%d對ppc進行兩次解引用,*(*ppc)==*pc==c==2\n",*(*ppc));
putchar('\n');
return0;
}
運行結(jié)果為:
一級指針二級指針做函數(shù)形參
許多初學(xué)者在使用一級指針的時候基本沒什么問題
例如
inta=10;
intfun(int*p)
return(
*p+=10);
}
在調(diào)用是時需要定義一個變量intb=fun(
當(dāng)二級指針做形參的時候,調(diào)用該函數(shù)時實參應(yīng)該以什么格式填寫?
inta=1;
intb=2;
intfun1(int**p1,int*p2)//二級指針做形參后面舉例用
return(**p1+*p2);
intfun2(intx,inty)
return(x+y);
}
函數(shù)fun1的第一個形參是**p1二級指針,第二個是*p2,最終的目的是將兩個變量相加
我們對比fun2,這個函數(shù)的形參都是普通變量,調(diào)用時直接intsum=fun2(a,b),最終的目的是將兩個變量相加.
通過對比,我們發(fā)現(xiàn)**p1代表一個變量,*p2也代表一個變量。
我們來分析下*p這個東西。
inta=2;
intb=3;
int*p=
我們可以知道p存放的值就是變量a的地址,*(地址)就相當(dāng)于把這個地址的值取出來。
假如a的地址等于0x123456,p也==0x123456,b=(*p)==*(a的地址)==a的值;通過這步b就等于2;
我們回到fun1函數(shù),**p怎么才能轉(zhuǎn)換為一個變量呢,看下圖
一級指針只有一層解引用*(地址)則得到一個變量,
二級指針內(nèi)層解引用得到一個地址add2,對add2解引用得到一個變量
*(add1)=add2,*(add2)=變量*(*(add1))=變量
所以fun1的第一個實參應(yīng)該填一個地址ADD1對ADD1解引用得到ADD2,對ADD2解引用得到一個變量
下面看看實例
#includestdio.h
intc=2,d=3;
int*pc=
int**ppc=
intfun1(int**p1,int*p2)//二級指針做形參后面舉例用
return(**p1+*p2);
intmain()
intsum=fun1(pc,//在二級指針形參填寫一個指針的地址,這個指針指向一個變量
printf("sum=%d\n",sum);
putchar('\n');
printf("------------------------------------------\n");
printf("c的地址=%p\n",
printf("pc指向的地址=%p\n",pc);
printf("*pc=%d\n",*pc);
putchar('\n');
printf("------------------------------------------\n");
printf("c的地址=%p\n",
printf("pc指向的地址=%p\n",pc);
printf("pc的地址=%p\n",pc);
putchar('\n');
printf("------------------------------------------\n");
printf("ppc指向的地址=%p\n",ppc);
printf("*(ppc)的地址=%p\n",*(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教資面試素養(yǎng)(教態(tài)禮儀)試題及參考答案
- 企業(yè)培訓(xùn)師職業(yè)技能鑒定試題答案
- 2025年特種設(shè)備企業(yè)安全生產(chǎn)試題及答案
- 2025年建材行業(yè)安全生產(chǎn)基礎(chǔ)知識試題及答案
- 2025年化妝品銷售崗前銷售話術(shù)試題及答案
- 青少年體能課試題帶答案
- T-CIATCM 010-2019 中醫(yī)舌象診斷信息分類與代碼
- Unit 4 My Favourite Subject Section B 1a-1d 教學(xué)設(shè)計 人教版(2024)七年級英語上冊
- 2025年內(nèi)外婦兒護理學(xué)基礎(chǔ)題庫及答案
- 七年級地理下冊同步教學(xué)教學(xué)設(shè)計(商務(wù)星球版2024)
- 注塑成型技術(shù)培訓(xùn)之工藝?yán)斫庹n件
- 信息論與編碼(第4版)完整全套課件
- 廣西佑太藥業(yè)有限責(zé)任公司醫(yī)藥中間體項目環(huán)評報告書
- 汽修廠安全風(fēng)險分級管控清單
- 海綿城市公園改造施工組織設(shè)計
- 上體自編教材-體育運動概論-模擬
- 05625《心理治療》案例分析
- GB/T 2679.7-2005紙板戳穿強度的測定
- GB/T 25840-2010規(guī)定電氣設(shè)備部件(特別是接線端子)允許溫升的導(dǎo)則
- GB/T 25146-2010工業(yè)設(shè)備化學(xué)清洗質(zhì)量驗收規(guī)范
- GB 6675.1-2014玩具安全第1部分:基本規(guī)范
評論
0/150
提交評論