首页 > 试题广场 >

下面程序运行的结果是()

[单选题]
下面程序运行的结果是()。
#include<stdio.h>
void add(int *p){
	(*p)++;
	printf("%d", *p);
	if (*p > 5){
		return;
	}
	add(p);
}
int main(){
	int i = 0;
	add(&i);
	return 0;
}
  • 12345
  • 123456
  • 111111
  • 未知
做错了~~

  *p++ :表示先访问*p,然后p++

  (*p)++: 表示先访问*p,然后将*p的值++p指针不变。
  
发表于 2015-09-04 20:48:06 回复(8)
123456
选B

当*p = 5时,会再调用add(p),然后先输出*p = 6,然后进行判断,直接跳出程序。所以从1一直到6

发表于 2015-09-01 14:24:09 回复(2)
123456 &i=p,所以*p就是i,就是一个简单的x++循环
发表于 2016-09-09 11:26:38 回复(0)
此题判断语句是大于5,所以当p=5时不会退出,而是再执行一遍
发表于 2022-05-27 22:47:42 回复(1)
p恒指向i,i的地址空间内容一直++

程序首先定义了一个递归函数add,该函数的参数是一个指向整数的指针。在函数内部,首先将指针所指向的整数加1,然后打印该整数。如果加1后的整数大于5,则函数返回。否则,递归调用add函数,并传入同一个指针。

在主函数main中,定义了一个整数变量i,并将其初始化为0。然后调用add函数,并将i的地址作为参数传递给add函数。

当add函数被第一次调用时,会将i的值加1,并打印出1。然后,函数内部检查加1后的值是否大于5,由于1小于等于5,所以会再次递归调用add函数。

第二次调用时,将i的值加1,并打印出2。然后继续递归调用add函数。

依此类推,每次递归调用都会将i的值加1,并打印出相应的值,直到加1后的值大于5为止。

因此,程序运行的结果是:123456。

发表于 2023-11-10 14:21:56 回复(0)
虽然add函数里面再次调用add后就不是传引用(即不会影响之前的参数),而是传指针变量,但是每次add函数里面输出的还是此时的参数,并且会加一
发表于 2022-03-25 19:18:07 回复(0)
*p=6 的时候  还是先调用的printf
发表于 2015-09-03 19:31:07 回复(0)
为什么我做了很多遍都是 111111 p的指向不是不会变吗
发表于 2020-03-26 12:08:16 回复(1)
这题是不是有问题,,我老是算出来111111
发表于 2017-01-05 12:12:41 回复(0)
看错了,i 的初始值为什么0
发表于 2017-09-29 11:36:21 回复(0)
指针p所指一直没有改变,变得是指针p所指向的值。
发表于 2022-05-31 11:25:07 回复(0)
上面函数对p算完后再次调用函数,所以p再加一后打印数据,因此最后输出123456
发表于 2022-05-05 15:34:58 回复(0)
p是地址。不是值传递,是地址传递
发表于 2022-03-01 11:36:16 回复(0)

  *p++ :表示先访问*p,然后p++;

  (*p)++: 表示先访问*p,然后将*p的值++;p指针不变。
发表于 2021-06-07 08:26:31 回复(0)
*p有返回值的 可以理解为引用
发表于 2021-05-10 17:29:49 回复(0)
粗心的有没有
发表于 2018-09-21 23:40:08 回复(0)
表示add(这里是个指针)
发表于 2017-03-09 12:45:01 回复(0)
*p大于5才退出,每次*p加1,所以会输出123456
发表于 2016-09-02 15:04:44 回复(0)
123456
*p>5才return,也就是要至少等于6才会return,那么也就至少输出到了6
发表于 2016-09-01 15:55:56 回复(0)