c語言中的二級指針做函數(shù)參數(shù)說明_第1頁
c語言中的二級指針做函數(shù)參數(shù)說明_第2頁
c語言中的二級指針做函數(shù)參數(shù)說明_第3頁
c語言中的二級指針做函數(shù)參數(shù)說明_第4頁
c語言中的二級指針做函數(shù)參數(shù)說明_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論