单选题
1、第11题 (1.0分) 题号:658 若使用一维数组名作函数实参,则以下正确的说法是()。
A
必须在主调函数中说明此数组的大小
B
实参数组类型与形参数组类型可以不匹配
C
在被调用函数中,不需要考虑形参数组的大小
D
实参数组名与形参数组名必须一致
答案解析
正确答案:A
解析:
这道题考察的是 C 语言中**数组名作为函数参数传递**的机制。
### 核心知识点解析
在 C 语言中,当一维数组名作为函数的实参时,实际上传递的是**数组首元素的地址**(即指针),而不是整个数组的副本。这意味着形参接收到的是一个指向该数组第一个元素的指针。
### 选项逐一分析
* **A. 必须在主调函数中说明此数组的大小 —— 【正确】**
* **理由**:虽然在被调用函数内部,形参通常被处理为指针,无法直接通过 `sizeof` 获取数组长度,但在**主调函数**(调用者)中,必须定义并分配好数组的内存空间,也就是说必须明确数组的大小,才能生成有效的数组名(地址)传递给被调函数。如果主调函数中没有定义数组大小,数组就不存在,也就无法传递数组名。因此,从程序正确性的角度来看,主调函数中必须说明(定义)数组的大小。
* **B. 实参数组类型与形参数组类型可以不匹配 —— 【错误】**
* **理由**:C 语言是强类型语言。实参数组元素的类型必须与形参声明的类型兼容(一致或可隐式转换)。如果类型不匹配(例如实参是 `int` 数组,形参是 `float` 指针),编译器会发出警告或错误,导致数据解释错误。
* **C. 在被调用函数中,不需要考虑形参数组的大小 —— 【错误】**
* **理由**:这是一个常见的误区。因为传递的是地址,被调函数**丢失了数组的长度信息**。如果被调函数需要遍历或操作整个数组,程序员**必须**通过额外的参数(如传入数组长度 `n`)来告知函数数组的大小,否则极易发生数组越界访问。因此,在被调函数中“需要考虑”数组大小,通常需要通过其他途径获取。
* **D. 实参数组名与形参数组名必须一致 —— 【错误】**
* **理由**:实参和形参是两个不同作用域中的标识符。实参是主调函数中的数组名,形参是被调函数中的局部变量(指针)。它们的名称可以完全不同,只要类型兼容且传递的是地址即可。例如,主调函数用 `arr`,被调函数可以用 `x` 接收。
### 总结
* 数组传参本质是**传地址**。
* 主调函数必须定义数组(确定大小)才能产生地址。
* 被调函数收到的是指针,不知道数组多大,通常需要额外传递长度。
* 类型必须匹配,名字可以不同。
因此,最符合逻辑和规范的说法是 **A**。
题目纠错
c语言选择判断题库
相关题目
单选题
1、第248题 (1.0分) 题号:682 sizeof( )是()。
单选题
1、第247题 (1.0分) 题号:182 执行下面程序后,输出结果是()。
单选题
1、第246题 (1.0分) 题号:718 系统的标准输入文件是指()。
单选题
1、第245题 (1.0分) 题号:621 printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列,如果字符串长度大于5,则输出按方式()。
单选题
1、第244题 (1.0分) 题号:205 变量p为指针变量,若p=&a,下列说法不正确的是()。
单选题
1、第243题 (1.0分) 题号:638 设有数组定义: char array [ ]=“China”; 则数组 array所占的 空间为()。
单选题
1、第242题 (1.0分) 题号:89 以下标识符中,不能作为合法的C用户定义标识符的是()。
单选题
1、第241题 (1.0分) 题号:194 若有下列定义,则对a数组元素地址的正确引用是()。 int a[5],*p=a;
单选题
1、第240题 (1.0分) 题号:198 设有以下语句, 若0
单选题
1、第239题 (1.0分) 题号:583 已知大写字母A的ASCII码值是65,小写字母a的ASCII码是97,则用 八进制表示的字符常量'\101'是()。
