void fun(int *n) { while((*n)--); printf("%d",++(*n));} void main() {int a=100; fun(&a);}此题求详解

如题所述

下列程序的输出结果是__0___

原因如下:
main函数中,将&a伪作参数传递给fun(int *n) ,
所以指针n指向了a的地址,*n的值即为a的值,也就是100

在fun函数中,
while((*n)--);
注意,这个while语句后面有一个;分号,所以这一个while循环的作用是:
将*n的值循环递减,直到(*n)--的值为0。
又由于(*n)--是先带入,再处理--,
所以退出循环后,*n的值变为了-1。

再执行printf("%d",++( *n )); 这一句,
注意,这里++(*n)是先进行++处理,再带入,
所以是先将*n加一变为0后,再输出。

所以输出结果是0

参考资料:baidu

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-07-29
输出1.
while((*n)--);这句,先判断(*n)是否为0然后进行自减操作。所以减至(*n)为0时跳出循环。
printf("%d",++(*n));这句,先使(*n)自加,然后打印输出。所以此时打印1.

PS: n--先使用n用作当前表达式的变量,然后再自减,n++也是一样
--n先自减,然后再将自减后的n当做表达式中的变量。
第2个回答  2011-07-29
结果为0。。
先执行while((*n)--); //100在减啊减啊减。。。
在执行 printf("%d",++(*n)); // 最后输出0。。。。
第3个回答  2021-06-03
为什么能减到0啊?当a=100,带去while循环时,(*n)--=100,*n=100,(*n)--=99,++*n=100不是跳出循环了吗?
第4个回答  推荐于2018-03-14
void fun(int *n)
{
while((*n)--); //(*n)为存储空间值减减 当(*n)-- 为0时 也就是(*n)=0 此时减减后 *n=-1
printf("%d",++(*n)); // 输出 0
}
void main() //主函数
{
int a=100;
fun(&a); //把a的地址给函数
}
输出结果为 :0追问

那下面的a=100有什么用啊?
n不是等于100吗?

追答

while((*n)--); 有逗号 你a=100 与后面的输出没关系

追问

我是初学者啊,没看到逗号呀?

追答

下次注意就没问题了

本回答被网友采纳

void fun(int *n) { while((*n)--); printf("%d",++(*n));} void ma...
在main函数中,将&a伪作参数传递给fun(int *n) ,所以指针n指向了a的地址,*n的值即为a的值,也就是100 在fun函数中,while((*n)--);注意,这个while语句后面有一个;分号,所以这一个while循环的作用是:将*n的值循环递减,直到(*n)--的值为0。又由于(*n)--是先带入,再处理--,所...

...void fun(int n) { if(n) fun(n-1); printf(“%d”,n); } main...
先递归,再打印,当n为0的时候结束打印,但0还是会执行后续的输出 于是是从0打印到5 选c

请高手帮我解决一下这道C语言题目,谢谢!
a的地址传给n,while 把a的值变为 -1,因为while跳出循环的条件是0,而测试的是减一之前的a,所以a的值变为-1了,输出之前,a的值又被加为0,所以结果是 0

...d=2; p=d++; printf("%d",p);} main() { int a=1; fun(a);_百度知...
printf("%d\\n",a);在主函数中输出a,而被调函数fun并没有返回值的,其类型为void,所以被调函数中的p值无法返回主调函数,他们之间是值传递,非址传递,改成下面两种都可以:一:include <stdio.h> int fun (int p) \/*改函数类型为返回int型值*\/ { int d=2;p=d++;printf("%d",p...

c语言 函数指针一道题目不懂,在线等,谢谢!
while((*n)--);后面有个分号 所以循环没有其他语句 即当 *n=0时跳出循环 由于 (*n)--的原因 i--是先使用 i 在使i-- 所以 *n=0时 先是跳出循环 然后 *n再-- 变成了 -1 printf(“%d”,++(*n));++*n 这个 ++i是先自加 然后在使用 i 所以 现在*n是-1 应该先+1...

void fun(int a) { ++a; } main() { int i,a=1; for(i=0;i<10;i++...
因为void fun(int a) {}这里a是形式参数,只能传值,不能传地址。所以,调用这个函数时,是把调用他的变量的值,复制了一份,这份复制的值的变量,不影响调用他的语句中的变量值。所以, fun(a);不管 fun(int a) {\/\/这里是内部},fun函数内部如何变化, main()函数中的a的值,是不变的。

...void main() {int n=0; while(n++<=1) printf("%d\\t",n); printf...
首先,n是0,n++是先拿n=0与1进行比较,while循环条件为1,比较结束后此时n++,即n=1,进入第一条printf语句,此时输出n为1,再进入while循环,判断n等于1的时候和1的关系,依然为真,此时n=2,输出2,然后再返回while循环,n=2时候此循环不成立,跳到第二条printf语句,此时n=3,输出3,即...

...int func(int x,int *p); void main( ) { int a=1,b=2,c; c=fun...
func作用是将传入的第二个参数改为x+2+1=x+3,并返回2x+2+2=2x+4,所以 int a=1,b=2,c;c=func(a,&b); \/\/这句执行后b=a+3=4 c=2*a+4=6 b=func(c,&b);\/\/同上,b=2*6+4=16 a=func(b,&c);\/\/ c=16+3=19 a=2*16+4=36 即abc分别为36 16 19 ...

...void fun(int *p) {printf("%d\\n",p[5]);} main() {int a[10]={...
大哥 你函数都没调用噢 怎么得出9呢?如果在主函数加上fun(a)的话,结果是6,不可能是9或者8噢!

...void main() { int n=1; printf("%d,%d,%d",n,++n,n--); }_百度...
因为在一些编译环境中,printf的执行执行顺序是颠倒的,即从右向左执行。printf("%d,%d,%d",n,++n,n--);所以n--先执行,此时n的值为0。因为后缀的自减操作是有“延迟的”,所以输出为1 ++n第二个执行,自增操作立即生效,输出为1 n第三个执行,输出为1 所以输出为1,1,1 你可以在自己的...

相似回答