在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...