以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  [求助]C语言  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=28216)


--  作者:lihongbin018
--  发布时间:3/6/2006 8:40:00 PM

--  [求助]C语言
再问一个题
以下程序的输出结果是
#include<stdio.h>
void prt(int *x,int *y,int *z)
{
   printf("%d,%d,%d\n",++*x,++*y,*(z++));
}
main()
{
   int a=10,b=40,c=20;
   prt(&a,&b,&c);
   prt(&a,&b,&c);
}

a)  11,42,31
     12,22,41

b)  11,41,20
     12,42,20

c)  11,21,40
     11,21,21

d)  11,41,21
     12,42,22
谢谢


--  作者:elfstone
--  发布时间:3/6/2006 9:59:00 PM

--  
输出结果为b
11,41,20
12,42,20
像这样的程序,自己运行一下就行了。。。
--  作者:NEW人
--  发布时间:3/16/2006 4:21:00 PM

--  
把程序简化一下,应该很清楚了,x,y,z一开始分别指向a,b,c,*(z++);只是把函数prt中的一个局部指针从指向c,移动到了指向a,并没有改变c的值,而++*x->++(*x),是对x指向的值作了累加,所以,a的值会累加
void prt(int *x,int *y,int *z)
{
   *(z++);
}


16:      int a=10,b=40,c=20;
00401078   mov         dword ptr [ebp-4],0Ah
0040107F   mov         dword ptr [ebp-8],28h
00401086   mov         dword ptr [ebp-0Ch],14h
17:      prt(&a,&b,&c);
0040108D   lea         eax,[ebp-0Ch]
00401090   push        eax
00401091   lea         ecx,[ebp-8]                        
00401094   push        ecx
00401095   lea         edx,[ebp-4]
00401098   push        edx
00401099   call        @ILT+0(prt) (00401005)
0040109E   add         esp,0Ch
18:      prt(&a,&b,&c);
004010A1   lea         eax,[ebp-0Ch]
004010A4   push        eax
004010A5   lea         ecx,[ebp-8]
004010A8   push        ecx
004010A9   lea         edx,[ebp-4]
004010AC   push        edx
004010AD   call        @ILT+0(prt) (00401005)
004010B2   add         esp,0Ch


--  作者:Rahxephone
--  发布时间:3/31/2006 11:33:00 PM

--  
还是汇编下看得清楚
--  作者:baiyoung
--  发布时间:4/7/2006 4:37:00 PM

--  
b)  11,41,20
     12,42,20


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.012ms