全部问题 > 当前问题

求解课后题目

有以下程序
#include <stdio.h>
void fun(int p)
{
  int d=2;
  p=d++;printf("%d",p);
}
main()
{
  int a=1;
  fun(a); printf("%d\n",a);
}
程序运行后的输出结果是 ___21___ 。




这个a按值传递过去p不就先为1了么,下面1=2不就矛盾了么???

四年半。 2016-8-4 20:55:25

共 8 个回答

嘿嘿大人 2016-8-4 21:11:16

p=d++;这是个赋值语句,不是让你去判断,p最开始是等于1,但是经过这个语句之后p就等于2了

四年半。 2016-8-4 21:21:04

回复 嘿嘿大人:那p一开始是1,结过赋值语句就直接从1变成2,是不是太不合情理了。。。那要它原来等于1有什么意义。 

嘿嘿大人 2016-8-4 21:38:47

回复 四年半。:你觉得需要什么意义,这就是用来考知识点的而已,根本就没有啥意义的,它就是想考你按值传递和地址传递的区别

四年半。 2016-8-4 21:44:29

回复 嘿嘿大人: 这个是就近原则的原因么。。要不然一开始的b=1莫名其妙没有了。。

嘿嘿大人 2016-8-4 21:47:41

回复 四年半。:不是,这就是一个赋值语句,而且那里有什么b=1?

四年半。 2016-8-4 21:51:24

回复 嘿嘿大人:是p=1,打错了。  我不明白的是既然传递过去p=1,为什么已经赋值的p还可以再次赋值了。。。。

嘿嘿大人 2016-8-4 21:56:43

回复 四年半。:因为p是个变量啊,变量的特点就是可以随时随地的变撒,不然干嘛要发明变量

嘿嘿大人 2016-8-4 21:57:44

回复 四年半。:比如说int i=0;

按照你的思路那么这个i就不能被操作了哟,那这个i拿来还有啥用嘛

问题来自: 形参和实参