指標將引數傳遞給函式的過程分析

2021-09-24 20:45:18 字數 3498 閱讀 1930

在mfc框架下,展示了位址傳遞方式參與函式運算的過程。

void

test

(int *pmn)

int main()

執行結果:

atltracegeneral -

&p=0x4febb0

atltracegeneral - p=

0x4febbc

atltracegeneral -

*p=0x14

atltracegeneral -

&pmn=

0x4fe9bc

atltracegeneral - pmn=

0x4febbc

atltracegeneral -

*pmn=

0x14

在指標給函式傳遞引數的時候,函式本身動態建立乙個指標pmn,其位址為0x4fe9bc,然後將指標p的值(即p)複製給pmn(即pmn=p),因為p=&n,所以pmn=&n,此時p和指標pmn均指向n,所以,對*pmn操作可以改變n的值,這就是位址傳遞,傳遞的是n的位址。

//目的是在test函式內根據需要建立陣列,然後返回該陣列的首位址

void

test

(char * pframe)

int main()

; char *frame = frame;

frame[3]

='k'

;trace

("&frame=%x\n"

,&frame)

;trace

("frame=%x\n"

, frame)

;trace

("frame[3]=%c\n"

, frame[3]

);trace

("- - - - - - - - - - - - - - - - -\n");

test

(frame)

;trace

("- - - - - - - - - - - - - - - - -\n");

trace

("&frame=%x\n"

,&frame)

;trace

("frame=%x\n"

, frame)

;trace

("frame[3]=%c\n"

, frame[3]

);return0;

}

執行結果:

atltracegeneral -

&frame=cfe98c

atltracegeneral - frame=cfe998

atltracegeneral - frame[3]

=katltracegeneral ---

----

----

----

---atltracegeneral -in-

&pframe=cfe700

atltracegeneral -

in-pframe=cfe998

atltracegeneral -

in-pframe[3]

=katltracegeneral -

&pframe=cfe700

atltracegeneral - pframe=dae9c8

atltracegeneral - pframe[3]

=aatltracegeneral ---

----

----

----

---atltracegeneral -

&frame=cfe98c

atltracegeneral - frame=cfe998

atltracegeneral - frame[3]

=k

test函式只是得到了frame的值(即frame),屬於指標的值傳遞,只能使用frame的值,對frame的更改不會傳遞到test外部,所以在函式外部frame的值沒有變化。

//目的是在test函式內根據需要建立陣列,然後返回該陣列的首位址

void

test

(char * pframe)

int main()

; char *frame = frame;

frame[3]

='k'

;trace

("&frame=%x\n"

,&frame)

;trace

("frame=%x\n"

, frame)

;trace

("frame[3]=%c\n"

, frame[3]

);trace

("- - - - - - - - - - - - - - - - -\n");

test

(&frame)

;trace

("- - - - - - - - - - - - - - - - -\n");

trace

("&frame=%x\n"

,&frame)

;trace

("frame=%x\n"

, frame)

;trace

("frame[3]=%c\n"

, frame[3]

);delete frame;

return0;

}

注意,new動態建立後,一定要delete,一般是生產的不消費,消費的不生產。

執行結果:

atltracegeneral -

&frame=f8edfc

atltracegeneral - frame=f8ee08

atltracegeneral - frame[3]

=katltracegeneral ---

----

----

----

---atltracegeneral -

in-pframe=f8edfc

atltracegeneral -in-

*pframe=f8ee08

atltracegeneral -in-

(*pframe)[3

]=katltracegeneral - pframe=f8edfc

atltracegeneral -

*pframe=

11ca508

atltracegeneral -

(*pframe)[3

]=aatltracegeneral ---

----

----

----

---atltracegeneral -

&frame=f8edfc

atltracegeneral - frame=

11ca508

atltracegeneral - frame[3]

=a

只有通過位址訪問的值才能被改變。

函式指標作為引數傳遞給函式

函式指標同樣是可以作為引數傳遞給函式的,include include using namespace std int test int int test2 int ra int int void main int argc,char argv coutfp fpi fpi test fpi賦予te...

c 函式指標 將函式名作為引數傳遞給函式

c 把函式a作為引數傳遞給另外函式b時,實際上是把函式a作為指標傳遞給另外的函式b,這就涉及到了函式指標。函式指標宣告如下 return type p name arg list 表示返回值為return type,引數列表為arg list的函式指標p name.例如 定義乙個函式 intadd ...

將陣列傳遞給函式

一維陣列 傳遞陣列給函式的3個原則 1.函式呼叫時只需傳遞陣列名。2.在函式定義中,形參的型別必須與陣列的相同,陣列的大小不必指定。3.函式原型必須定義為引數是乙個陣列。include include voidsort intx,intm intmain printf marks before so...