五、函数
函数的定义不能被嵌套,函数的调用可以被嵌套
1.下列关于函数叙述中,错误的是
A 函数未被调用时,系统将不为形参分配内存单元。(调用结束时释放)。
B 实参与形参的个数应相等,且类型对应一致。
C 当形参是变量时,实参可以是常量、变量或表达式。
D 形参可以是常量、变量或表达式。只能是变量
2.函数调用时,当实参和形参都是简单变量,他们之间数据传递的过程是:实参将值传递给形参,调用结束时形参并不将其值传回给实参-------形不改实
函数调用时,若用数组名作为函数的参数,以下叙述正确的是
若用数组名作为函数调用时的实参,则实际上传递给形参的是数组首地址。数组首地址数组是第一个元素的地址。数组名字本身就是一个指针,它是一个指针常量,指向的地址不变。
形参指针是有自己独立的存储空间,实参数组也有自己独立的存储空间
3.c语言中函数的返回值的类型是由(D)决定
A return语句中的表达式类型
B 调用函数的主调函数类型
C 调用函数时临时
D 定义函数时指定的函数类型
4.在一个函数体内说明语句后的复合语句中定义一个变量,则该变量C
A 为全局变量,在本程序文件范围内有效
B 为局部变量,只在该函数内有效
C 为局部变量,只在复合语句中有效//因为一个函数可以有多个符合语句
D 定义无效,为非法变量
5.定义一个void类型函数意味着调用该函数时,函数
A 通过return返回一个用户所希望的函数值
B 返回一个系统默认值
C 没有返回值 //是为了显式指明,程序不处理函数返回值。这是一种较好的编程规范,增加可读性之类的好处。
D 返回一个不确定的值
6.下列程序的运行结果8 17
int func(int a, int b)
{
static int m = 0, i = 2;
i += m + 1;
m = i + a + b;//第一次在此函数中i= 3,m = 8
return(m);//第二次i=12,m = 17
}
int main()
{
int k = 4, m = 1, p;
p = func(k, m);
printf("%d", p);
p = func(k, m);
printf("%d\n", p);
}
//.data已经初始化的全局变量
.bass未初始化的全局变量
1)修饰局部变量,改变局部变量的生存周期,静态局部变量如果没有被用户初始化,则会被编译器自动赋值为0,存放在.data段
2)修饰全局变量和函数,改变作用域(作用域由原来的整个工程变为在本文件内)
3)c语言不允许在函数外对全局变量赋值
7.以下函数是比较字符串s和t的大小,当s等于t时返回0,否则返回s和t第一个不同字符的ASCLL差值,当s>t返回正值,当是s<t返回负值
my_cmp(char* s, char* t)
{
while (*s == *t)
{
if (*s == '\0')//以\0做判断条件
return 0;
++s;
++t;
}
return *s - *t;
}