AI智能推荐题库-试题通 AI智能整理导入题库-试题通
×
首页 题库中心 c语言选择判断题库 题目详情
CA4E3A01C46000013755684012D01E55
c语言选择判断题库
379
单选题

1、第118题 (1.0分) 题号:200 若有定义:char *p1,*p2,*p3,*p4,ch; 则不能正确赋值的程序语句为()。

A
 p1=&ch; scanf(”%c”,p1);
B
 p2=(char *)malloc(1);scanf(”%c”,p2);
C
 *p3=getchar();
D
 p4=&ch;*p4=getchar();

答案解析

正确答案:C

解析:

这道题考查的是 C 语言中指针的初始化、内存分配以及通过指针进行赋值的合法性。我们需要逐一分析每个选项,判断其是否存在语法错误或运行时错误(如野指针解引用)。 **题目分析:** 定义语句 `char *p1,*p2,*p3,*p4,ch;` 声明了四个字符型指针变量和一个字符型变量。 * 注意:在 C 语言中,局部指针变量如果没有显式初始化,它们的值是未定义的(即指向随机地址,通常称为“野指针”)。 * 对野指针进行解引用(即使用 `*p` 访问或修改其指向的内容)会导致未定义行为,通常会引起程序崩溃(Segmentation Fault)。 **选项解析:** * **A. `p1=&ch; scanf("%c",p1);`** * `p1 = &ch;`:将字符变量 `ch` 的地址赋值给指针 `p1`。此时 `p1` 指向合法的内存空间(变量 `ch`)。 * `scanf("%c", p1);`:`scanf` 需要传入地址来存储读取的数据。`p1` 本身就是一个地址,且指向合法空间。 * **结论**:合法且正确。 * **B. `p2=(char *)malloc(1); scanf("%c",p2);`** * `p2 = (char *)malloc(1);`:动态分配 1 个字节的内存,并将首地址赋值给 `p2`。此时 `p2` 指向堆区的一块合法内存。 * `scanf("%c", p2);`:同上,`p2` 是合法地址,可以用于接收输入。 * **结论**:合法且正确。 * **C. `*p3=getchar();`** * `p3` 是一个未初始化的指针,它的值是随机的(野指针)。 * `*p3` 表示试图访问 `p3` 所指向的内存位置。 * `getchar()` 返回一个字符,试图将这个字符写入 `p3` 指向的随机地址。 * 由于 `p3` 没有指向任何合法分配的内存(既不是栈上的变量地址,也不是堆上 malloc 的地址),这种操作是非法的,会导致运行时错误。 * **结论**:**错误**,不能正确赋值。 * **D. `p4=&ch; *p4=getchar();`** * `p4 = &ch;`:将字符变量 `ch` 的地址赋值给 `p4`。此时 `p4` 指向合法的内存空间。 * `*p4 = getchar();`:`getchar()` 读取一个字符,然后通过解引用 `*p4` 将该字符存入 `p4` 指向的空间(即变量 `ch` 中)。 * **结论**:合法且正确。 **总结:** 选项 A、B、D 中的指针在使用前都已经被赋予了合法的内存地址(要么指向栈变量,要么指向动态分配的内存),因此可以安全地进行读写操作。唯独选项 C 中的 `p3` 是野指针,直接对其解引用赋值是非法操作。 因此,不能正确赋值的程序语句是 **C**。
题目纠错
c语言选择判断题库

扫码进入小程序
随时随地练习

关闭登录弹窗
专为自学备考人员打造
勾选图标
自助导入本地题库
勾选图标
多种刷题考试模式
勾选图标
本地离线答题搜题
勾选图标
扫码考试方便快捷
勾选图标
海量试题每日更新
波浪装饰图
欢迎登录试题通
可以使用以下方式扫码登陆
APP图标
使用APP登录
微信图标
使用微信登录
试题通小程序二维码
联系电话:
400-660-3606
试题通企业微信二维码