关于数组和函数的几个问题

来源:百度知道 编辑:UC知道 时间:2024/09/22 03:44:06
1.当执行下面的程序时,如果输入ABC,则输出的结果是?
#include<stdio.h>
#include<stdio.h>
main()
{ char ss[10]="1,2,3,4,5";
gets(ss);strcat(ss,"6789");printf("%s\n",ss);
}
答案是 ABC6789 为什么啊?
2.以下函数调用语句中,含有的实参个数是几个?
fun(x+y,(e1,e2),fun(xy,d,(a,b)));
答案是3 这3个实参分别指哪3个啊?
3.在一个源文件中定义的外部变量的作用域为?
A 本文件的全部范围
B 本程序的全部范围
C 本函数的全部范围
D 从定义该变量的位置开始至本文件的结束
答案是B 其余几个选项为什么不对呢?麻烦逐一解释一下

1 gets(ss)将数组ss内容更改为ABC,注意从首地址开始存储.strcat()这个函数将在给定的数组最后一个字符后增加字符,故输出结果为ABC6789
2 fun(x+y,(e1,e2),fun(xy,d,(a,b))); 实参分别为x+y
,,(e1,e2),fun(xy,d,(a,b)),其实你只要看里面逗号分隔了几个式子就行了,有三个式子,就三个参数.第一个是X+Y的结果,第二个是逗号表达式,取最后一个,也就是e2,第三个是函数的返回值.
3 在一个源文件中定义的外部变量的作用域为?
A 本文件的全部范围
B 本程序的全部范围
C 本函数的全部范围
D 从定义该变量的位置开始至本文件的结束
一个源文件可以写几个程序,各个程序互不干涉都行,故定义的外部变量只能在那个程序中起作用.既然是外部变量,当然是在头文件后定义的,也就无所谓本函数了.

第一题:
gets函数读取用户输入的字符串并存放在缓冲区ss中, 它会在字符串末位加\0表示字符串结束, 所以你原来存放在ss中的内容全部都没有了
第二题:
我觉得应该是6个.根据行参和实的定义, 行参数是指函数声明或定义是的参数, 而实参则是函数调用时传递的参数,所以:
x+y 是一个
(e1, e2) 是一个
fun(xy,d,(a,b)) 整体是一个
其中又有
xy 是一个
d是 一个
(a,b) 是一个
所以一共应该是六个

第三题:
这个没什么说的外部变量是声明为extern的变量, 它的作用域本来就是程序级的, 即该程序中的所有文件都能访问它,