计算机二级C语言题

答案是A
这个题目,我基本上都懂,包括地址值的传递,我想问的是,*a不是等价于c2吗,那么(*a)++不就等于'a'++,是'b'嘛,但是因为这个调用函数的前面不是void,表示无返回值吗嘛,那为什么答案说c2是b,形参的值不是不能给实参吗?既然没有返回值,为什么调用函数算出的c2德值还要返回主调函数并作为结果输出来??
感觉是不是学乱了

答案是A啊。
'a'++自然是错误的,'a'是常量,不可能++;但++的不是'a',而是指针a指向的内容*a,*a=c2,c2是变量可以++;c2原来是'a',c2++当然就是'b'了。至于你说的“不能给实参”的问题,你理解成变量传递了,而这里是指针传递:传递的是指向变量的指针,函数中直接对指针指向的内容操作,实际上就是直接操作主调函数中的该指针指向的变量。但要注意,指针本身仍然是拷贝,被调函数中对指针本身的操作影响不到主调函数中的指针!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-02-05
main 函数没有void是可以的,即无函数返回值 但是不是规范的做法
程序的入口是main函数

main 函数中调用了fun函数
传入的参数是指针
fun得到了指针,它功能就是将第二指针指向的值+1
所以所以返回main 函数时 c2中的值已经变成了b
指针只是一个地址 你想想 别人有一张纸条上写了一个地址 然后你抄了一份新的
你拿着你自己抄的地址找到的地方

你拿着别人的纸条找到的地方
是不是一个地方?追问

他不是没有返回值吗??为什么最后还要返回main函数?

追答

即使没有返回值,在函数结束后也要返回调用它的函数中。
再说了 在c语言 中 void 也是一种返回值类型
你要和汉语做区别 不能直接用翻译成汉语理解它

第2个回答  2014-02-05
c语言中的函数都是传递一个数值,这里传递了地址的数值,所以对于*a的修改是会生效的。
运行的顺序是:a,b的值传入函数》b值赋给a(此时a的值将对应于储存c2的地址)》把地址内的东西+1。
所以c1不会改变,而c2会+1,这并不是函数返回造成的,而是由于修改了地址内的值。
输出Ab。
第3个回答  2014-02-05
楼主,我按你的问题思路来哈!
为什么c2是'b'?
因为p2的地址没变,而被调函数将p1的地址换为了p2的,然后再使p2的值自增1,所以为‘b’.
形参的值不少不能给实参吗?
这里并没有返回值,它只是通过被调函数进行了地址运算和值的自增,所以根本无需返回值。
为什么调用函数算出的c2的值还要返回……?
这里请楼主注意哈!输出时主函数输出,并非被调函数输出,被调函数的功能只是地址运算和值的自增。
欢迎追问。本回答被提问者采纳
第4个回答  2014-02-05
这里的形参是指针,指针的实际是地址,这里的意思是吧c2的地址作为形参付给被调用函数,被调用函数实际操作的是c2地址里c2的值,那么c2地址里实际的值也就跟着改变了。看看谭浩强的C程序设计吧,比我讲的清楚多了。
相似回答