单选题
1、第84题 (1.0分) 题号:180 以下函数调用语句中实参的个数是()。 func((e1,e2),(e3,e4,e5));
A
2
B
3
C
5
D
语法错误
答案解析
正确答案:A
解析:
这道题考查的是 C 语言中**逗号运算符**与**函数参数分隔符**的区别。
### 核心考点解析
在 C 语言中,逗号 `,` 有两种主要用途:
1. **作为参数分隔符**:在函数调用 `func(a, b)`中,逗号用于分隔不同的实参。
2. **作为逗号运算符**:在表达式 `(expr1, expr2)` 中,逗号是一个运算符。它会先计算左边的表达式,再计算右边的表达式,整个表达式的值是**最后一个表达式的值**。
### 详细推导过程
让我们分析题目中的函数调用语句:
```c
func((e1,e2),(e3,e4,e5));
```
1. **识别最外层的参数分隔**:
函数 `func` 的括号内,我们需要找到处于最外层、未被其他括号包裹的逗号,这些逗号才是用来分隔参数的。
观察结构:`func( 参数1 , 参数2 )`
* 第一个部分:`(e1,e2)`
* 第二个部分:`(e3,e4,e5)`
中间的那个逗号将这两个部分分开,因此这里有两个主要的参数位置。
2. **分析第一个实参 `(e1,e2)`**:
* 这是一个由括号包裹的表达式。
* 内部的逗号是**逗号运算符**。
* 根据逗号运算符的规则,`(e1,e2)` 先计算 `e1`,再计算 `e2`,整个表达式的结果是 `e2` 的值。
* 因此,这整体被视为**一个**实参。
3. **分析第二个实参 `(e3,e4,e5)`**:
* 同样,这是一个由括号包裹的表达式。
* 内部的逗号也是**逗号运算符**。
* 它会依次计算 `e3`、`e4`、`e5`,整个表达式的结果是 `e5` 的值。
* 因此,这也整体被视为**一个**实参。
### 结论
综上所述,函数 `func` 实际上接收了两个实参:
1. 第一个实参是表达式 `(e1,e2)` 的计算结果。
2. 第二个实参是表达式 `(e3,e4,e5)` 的计算结果。
所以,实参的个数是 **2**。
### 选项分析
* **A. 2**:正确。
* **B. 3**:错误。如果误以为 `(e3,e4,e5)` 中的逗号是参数分隔符,可能会数错,但因为有外层括号,它们是运算符。
* **C. 5**:错误。这是把所有变量 `e1` 到 `e5` 都当成了独立参数,忽略了括号和逗号运算符的优先级。
* **D. 语法错误**:错误。这种写法在 C 语言中是完全合法的。
**正确答案:A**
题目纠错
c语言选择判断题库
相关题目
单选题
1、第175题 (1.0分) 题号:190 关于指针概念说法不正确的是()。
单选题
1、第174题 (1.0分) 题号:119 下列运算符中,不属于关系运算符的是()。
单选题
1、第173题 (1.0分) 题号:660 在C语言中,函数的隐含存储类别是()。
单选题
1、第172题 (1.0分) 题号:737 下列关于C语言数据文件的叙述中正确的是()。
单选题
1、第171题 (1.0分) 题号:155 假定所有变量均已正确定义,下列程序段运行后x的值是()。
单选题
1、第170题 (1.0分) 题号:644 以下对一维整型数组a的正确说明是()。
单选题
1、第169题 (1.0分) 题号:744 当说明一个结构体变量时系统分配给它的内存是()。
单选题
1、第168题 (1.0分) 题号:490 以下字符中不是转义字符的是()。
单选题
1、第167题 (1.0分) 题号:510 int a=3,b=2,c=1; if( )a=b; else a=c; 则a的值为()。
单选题
1、第166题 (1.0分) 题号:652 在C语言中,引用数组元素时,其数组下标的数据类型允许是()。
