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

1、第92题 (1.0分) 题号:542 若有int *p=( )malloc( 则向内存申请到内存

A
 scanf(”%d”,p);
B
 scanf(”%d”,&p);
C
 scanf(”%d”,*p);
D
 scanf(”%d”,**p);

答案解析

正确答案:A

解析:

这道题考查的是 C 语言中动态内存分配与 `scanf` 函数的参数传递规则。 ### 1. 题目背景分析 虽然题目中的代码片段 `int *p=( )malloc(` 显示不完整,但根据语境可以推断其完整意图是: ```c int *p = (int *)malloc(sizeof(int)); ``` 这行代码的作用是: 1. 调用 `malloc`函数在堆区申请一块大小为 `sizeof(int)` 的内存空间。 2. 将这块内存的首地址赋值给指针变量 `p`。 3. 此时,`p` 是一个指向 `int` 类型数据的指针,它存储的是一个**地址**。 ### 2. `scanf` 函数原理 `scanf` 函数的原型为 `int scanf(const char *format, ...);`。 - 它需要接收变量的**地址**,以便将读取到的数据存入该地址对应的内存空间中。 - 格式字符串 `"%d"` 表示要读取一个十进制整数。 - 因此,第二个参数必须是一个指向 `int` 类型的指针(即 `int *` 类型)。 ### 3. 选项逐一分析 * **A. `scanf("%d", p);`** * `p` 的类型是 `int *`,它存储了 `malloc` 分配的内存地址。 * 直接将 `p` 传给 `scanf`,意味着告诉 `scanf`:“请把读到的整数存入 `p` 所指向的那块内存中”。 * 这是**正确**的用法。 * **B. `scanf("%d", &p);`** * `p` 本身是一个指针变量,`&p` 取得的是指针变量 `p` 自身的地址。 * `&p` 的类型是 `int **`(指向指针的指针)。 * 如果这样写,`scanf` 会把读入的整数覆盖到指针变量 `p` 所在的内存位置,导致 `p` 不再指向原来申请的内存,而是变成了一个由用户输入决定的非法地址或随机值。这不仅逻辑错误,还可能导致后续程序崩溃。 * 这是**错误**的。 * **C. `scanf("%d", *p);`** * `*p` 表示对指针 `p` 进行解引用,获取的是 `p` 指向的内存中的**值**(即一个 `int` 类型的数值)。 * `scanf` 需要的是地址,而不是值。传入一个整数值作为地址会导致程序试图向该数值对应的内存地址写入数据,这通常是非法操作,会导致段错误(Segmentation Fault)。 * 这是**错误**的。 * **D. `scanf("%d", **p);`** * `p` 是 `int *` 类型,`*p` 是 `int` 类型。 * `**p` 试图对一个 `int` 类型的数据再次进行解引用,这在语法上就是错误的(编译器会报错,因为 `int` 不是指针)。 * 这是**错误**的。 ### 4. 结论 要向 `malloc` 申请的内存中写入数据,应直接使用该内存块的地址,即指针变量 `p` 本身。 因此,正确答案是 **A**。
题目纠错
c语言选择判断题库

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

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