作者deh3215 (黑金属魂)
看板C_and_CPP
标题Re: [问题] 问一个基本的指标观念问题
时间Thu Nov 26 11:49:35 2009
※ 引述《samuelcdf (温泉龟)》之铭言:
: ※ 引述《kennychen67 (执着的勇士)》之铭言:
: : 请高手帮我解答疑惑一下
: : #include"stdio.h"
: : main()
: : {
: : int i,x[5];
: : int *p=x;
: : for(i=0;i<5;i++)
: : x[i]=10*i;
: : 到这里不是x[5]={0,10,20,30,40}
: : printf("%d %d %d\n,++*p,*++p,*p++")
: : 後面这里就看不太懂了我用dev c++跑出来的答案是21,20,0
: 如果没记错的话, 传到函式中的参数再传递的过程是被放到堆叠中, 也就是说
: 最後的顺序会变成这样:
: *p++
: *++p
: ++*p
: 字串"%d %d %d\n"的启始记忆体位置
: 所以,
: [p 等於 &x[0]], *p++
: 先把 *p(值为0)传出去, 然後 p 变成 &x[1] (显然compiler把*p++解释
: 为 *(p++) )
: [p 等於 &x[1]], *++p
: p 先变成 &x[2], 然後把*p传出去(也就是20)
: [p 等於 &x[2]], ++*p
: *p 先变成21, 然後把*p传出去 (21)
传到函式中的参数再传递的过程是被放到堆叠中 这句话的意思是说
printf("%d %d %d\n,++*p,*++p,*p++")
在堆叠里是|*p++|最後进去,先处理
|----|
|*++p|
|----|
|++*p|先进去,最後处理
|----|
这样的情形吗,所以处理顺序是*p++,*++p,++*p ?
最近在加强指标的观念
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.228.136.212
1F:推 twotwoone:这麽旧的文章你也回... 11/26 12:35
2F:→ deh3215:勇於发问,才能解决问题 11/26 13:56
3F:→ twotwoone:嗯,佩服 11/26 14:01