单选题
1、〖第4题〗700) 设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下
A
c=*p1+*p2;
B
p2=c;
C
p1=p2;
D
c=*p1*(*p2);
答案解析
正确答案:B
解析:
这道题考查的是 C 语言中**指针变量**与**字符变量**之间的类型兼容性及赋值规则。
### 核心知识点
1. **指针变量 (`p1`, `p2`)**:存储的是内存地址。在本题中,它们指向字符串,因此它们的类型通常是 `char *`。
2. **字符变量 (`c`)**:存储的是具体的字符值(本质上是整数 ASCII 码),类型是 `char`。
3. **赋值兼容性**:
* 指针只能赋给指针(或整型,但不推荐且可能有警告)。
* 字符/整型只能赋给字符/整型。
* **不能直接将一个字符值(`char`)赋给一个指针变量(`char *`)**,除非进行强制类型转换,否则编译器会报错或发出严重警告,因为类型不匹配。
### 选项逐一分析
* **A. `c = *p1 + *p2;`**
* `*p1` 和 `*p2` 分别取出指针指向的字符(`char` 类型)。
* 两个字符相加,结果是整数(`int` 类型,ASCII 码之和)。
* 将整数结果赋值给字符变量 `c`,会发生隐式类型转换(截断高位),这是**合法**的操作。
* **结论:语法正确。**
* **B. `p2 = c;`**
* `p2` 是一个指针变量(`char *`),期望接收一个地址。
* `c` 是一个字符变量(`char`),存储的是一个数值。
* 试图将一个字符值直接赋给指针变量,**类型不匹配**。在标准 C 语言中,这会导致编译错误("assignment makes pointer from integer without a cast")。
* **结论:语法错误。**
* **C. `p1 = p2;`**
* `p1` 和 `p2` 都是同类型的指针变量(`char *`)。
* 指针之间可以相互赋值,表示让 `p1` 也指向 `p2` 所指向的地址。
* **结论:语法正确。**
* **D. `c = *p1 * (*p2);`**
* `*p1` 和 `*p2` 取出字符。
* 两个字符相乘,结果是整数。
* 将整数结果赋值给字符变量 `c`,同样发生隐式转换,这是**合法**的操作。
* **结论:语法正确。**
### 题目逻辑推断
题目问法通常是:“以下**不正确**的是?” 或者 “以下**错误**的是?”
虽然用户提供的题干只写了“则以下”,没有明确写出问句,但根据给出的答案 **B**,我们可以反推题目的意图是选出**语法错误**或**非法**的一项。
* A、C、D 均为合法的 C 语言语句。
* B 是非法的赋值操作(类型不匹配)。
因此,正确答案选 **B**,因为它是唯一错误的语句。
### 最终解析总结
* **A 项**:合法。解引用指针得到字符,字符相加后赋值给字符变量。
* **B 项**:**非法**。不能将字符型变量直接赋值给指针型变量,类型不兼容。
* **C 项**:合法。同类型指针之间可以相互赋值。
* **D 项**:合法。解引用指针得到字符,字符相乘后赋值给字符变量。
故本题选 **B**(即找出错误的选项)。
题目纠错
c语言选择判断题库
相关题目
单选题
1、第295题 (1.0分) 题号:96 下列字符序列中,不可用作C语言标识符的是()。
单选题
1、第294题 (1.0分) 题号:165 下列定义数组的语句中正确的是()。
单选题
1、第293题 (1.0分) 题号:685 在位运算中,操作数每左移一位,其结果相当于()。
单选题
1、第292题 (1.0分) 题号:529 在C语言中,调用函数除函数名外,还必须有()。
单选题
1、第291题 (1.0分) 题号:574 若变量已正确定义并赋值,下面符合C语言语法的表达式是()。
单选题
1、第290题 (1.0分) 题号:563 以下叙述中正确的是()。
单选题
1、第289题 (1.0分) 题号:538 位字段数据的单位是()位。
单选题
1、第288题 (1.0分) 题号:137 若给定条件表达式( )?( ):( ),则其中表达式M()。
单选题
1、第287题 (1.0分) 题号:147 执行下列语句后,a和b的值分别为()。 int a,b; a=1+'a'; b=2+7%-4-'A';
单选题
1、第286题 (1.0分) 题号:690 设char型变量x中的值为10100111,则表达式(2+x)^(~3)的值是()。
