我做C语言有个题目不会。。想问问各位大侠。。。拜托了。。为什么答案是A,,,求详细解答。*c=*c+1;D=d+1

#include<stdio.h>
void fun (char*c,int d)
{*c=*c+1;d=d+1
printf(”%c,%c,”,*c,d);
}
main()
{char b=’a’,a=’A’;
fun(&b,a); printf(”%c,%c\n”,b,a);
}
程序运行后的输出结果是A
A)b,B,b,A B)b,B,B,A C)a,B,B,a D)a,B,a,B

注意fun函数的两个形式参数,第一个是指针传递是把变量b地址传递给子函数,即子函数中的变量b指向存放字符a的地址,与主函数中变量b指向的是同一位置,因此在子函数那个语句能够改变主函数中b的值,只是指针形参的一个用法,第二个形参就不用多说了把,子函数中形参的变化不会引起主函数中变量变化,因为使用的不是同一内存空间!所以调用子函数会输出bB,主函数中输出语句会输出bA!楼主能懂吧?不懂的话继续问哦!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-22
#include<stdio.h>
void fun (char*c,int d)
{*c=*c+1;//把c所指向的字符ASCII码加一
d=d+1;
printf(”%c,%c,”,*c,d);//以字符格式输出
}
main()
{char b=’a’,a=’A’;
fun(&b,a); //传入的值是b的指针和a的ASCII码值(也就是'a'的地址和'A'的ASCII值),都加一,所以输出是b,B
printf(”%c,%c\n”,b,a);//b以指针传入,在函数中值改了,所以b本身值也变为'b',而a是传值,所以不变
}
//不知道听懂没,如果还不懂可以加我百度问
第2个回答  2011-03-22
先执行主函数,把变量b的地址以及变量a的值传给函数fun,由于对变量c的处理是在处理b变量地址里的内容,因此对其加1,就是给分配给b的空间里的变量ASCII加1,也就是a+1,为b,传变量a的值给函数的意思是给变量d分配一个空间,然后将a的值拷入其中,因此对变量d的改变不影响变量a的值,故fun执行完以后变量b和a里面分别存储的是b和A
第3个回答  2011-03-22
选A
调用fun(&b,a)时,传递的是b的引用和a的值,在fun()中,会改变b的值,但不能改变a的值。
故在fun()中输出的是b,B,而在main函数中,b的值变了,而a的值没变,故输出b,A
所以答案为:b,B,b,A
第4个回答  2011-03-22
--fun(&b,a)指的是把b的地址,和变量a的值赋给fun()函数中的形参c和a
--fun(char *c,intb)指的是c是一个指针变量是用来存地址的这与把&b放如其中一致
注意这里的*c和下面的*c不是同一个意思,上面char *c 是说c这个变量是指针变量,是用来解释的定义,而下面*c=*c+1,这里的两个*c 都是只把c所指向的变量加一然后存到所指变量中相当于
a=a+1,其实d=d+1也是a=a+1不同的是c语言规定
因指针变量(如c)所指向而参与运算的变量(b)在功能函数(被调用函数)调用后值跟着变;
而变量(如b)在功能函数中值的改变并不改变原来变量(a)的值
第5个回答  2011-03-22
函数func传进去第一个为指针,第二个参数为变量。
在调用函数时候,形参并不是传入的实际值,而是会在栈里,生成一个临时变量来,存放实际传入的值也就是说相当于
void fun (char*c,int d)
{
Char *tmp_c = c;
Int tmp_d = d;
*tmp_c=*tmp_c+1;tmp_d=tmp_d+1 //注意这里tmp_d改变的大小仅仅只是临时变量的大小没有改变实际值的大小,
Tmp_c因为是指针的形式传进来的,相当于改了C指向的地址的值,所以实际值被修改了

printf(”%c,%c,”,*tmp_c,tmp_d);
}
//运行玩这个函数后,传入指针的变量大小被改变,传指的函数大小不变。
此时
a = ‘b’ a = ‘B’
所以选A
相似回答