三道题目
作者:管理员 来源:新浪爱问 日期:2008-04-15
1、
void change(int k[]){k[0]=k[5];}
main()
{
int x[10]={1,2,3,4,5,6,7,8,9,10},n=0;
while(n<=4) {change(&x[n]);n ;}
for(n=0;n<5;n ) printf("%d",x[n]);
printf("\n");
}
这里的void change(int k[]){k[0]=k[5];}如何理解,我一直以为是将k[5]的值赋给k[0],但是是赋地址是吗?如何理解?
2、
void fun2(char a,char b) {printf("%c%c",a,b);}
char a='A',b='B';
void fun1(){a='C';b='D';}
main()
{fun1();
printf("%c%c",a,b);
fun2('E','F');
}
输出CDEF
这里的fun1()是void型,而且也没有传地址,为什么还会改变a和b的值?
3、
还有就是函数:
#include "stdio.h"
main()
{fun3(fun1(),fun2());}
fun1()
{省略}
fun2()
{省略}
fun3(int a,int b)
{省略}
我本来选编译不通过,但是答案确是有确定答案的。这里的fun函数为什么会被调用,调用函数不是规定要先定义再调用或者先声明,再调用,再定义吗?为什么这题直接调用然后定义而没有声明部分???
电脑问题网给出的最佳答案
下面的回答仅供参考:
1、void change(int k[]){k[0]=k[5];}函数体的作用是将k[5]的值赋给k[0],是赋值,不是赋地址。因为该访问是用下标方式访问地址中的元素。再说了,参数数组是一个整型数组,不是整型指针数组。
2、为什么还会改变a和b的值? 因为char a='A',b='B'; 中,char型变量a和b是全局变量,代码中的哪个函数内部都可以访问。
3、C语言中又规定在以下几种情况时可以省去主调函数中对被调函数的函数说明。
A:如果被调函数的返回值是整型或字符型时, 可以不对被调函数作说明,而直接调用。这时系统将自动对被调函数返回值按整型处理。
B:当被调函数的函数定义出现在主调函数之前时, 在主调函数中也可以不对被调函数再作说明而直接调用。
C:如在所有函数定义之前,在函数外预先说明了各个函数的类型,则在以后的各主调函数中,可不再对被调函数作说明。
所以,你定义的fun1,fun2,fun3三个函数类型,默认是整型,可以不做函数说明。