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

1、第276题 (1.0分) 题号:706 若有说明:int *p,m=5,n;以下正确的程序段是()。

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

答案解析

正确答案:D

解析:

这道题主要考察 C 语言中**指针的定义、初始化以及通过指针间接访问变量**的基本规则。我们需要逐一分析每个选项,找出语法正确且逻辑安全的程序段。 **已知条件:** `int *p, m=5, n;` - `p` 是一个指向整型的指针变量,目前未初始化(野指针)。 - `m` 是一个整型变量,初始值为 5。 - `n` 是一个整型变量,未初始化。 **选项分析:** * **A. `p=&n; scanf("%d", &p);`** * `p=&n;`:将 `n` 的地址赋给指针 `p`,这是合法的,此时 `p` 指向 `n`。 * `scanf("%d", &p);`:`scanf` 需要接收一个地址来存储输入的数据。这里传入的是 `&p`,即**指针变量 p 本身的地址**。虽然语法上可能不报错(取决于编译器对类型匹配的严格程度,通常 `%d` 期望 `int*` 而 `&p` 是 `int**`,类型不匹配),但逻辑上是错误的。题目意图通常是给 `n` 赋值,应该传入 `p` 或者 `&n`。如果目的是给 `n` 赋值,这里写错了;如果目的是给指针 `p` 赋值(改变指向),格式符也不对。更重要的是,在标准 C 中,`%d` 对应 `int*`,传入 `int**` 会导致未定义行为或警告。因此该选项不正确。 * **B. `p=&n; scanf("%d", *p)`** * `p=&n;`:合法,`p` 指向 `n`。 * `scanf("%d", *p);`:`*p` 表示取出指针 `p` 指向的值(即变量 `n` 的值)。`scanf` 的第二个参数必须是一个**地址**(指针),而 `*p` 是一个 `int` 类型的值。将整数值当作地址传入 `scanf` 会导致程序运行时崩溃(段错误),因为程序会尝试向内存地址为 `n` 的值的位置写入数据,这通常是非法的。因此该选项错误。 * **C. `scanf("%d", &n); *p=n;`** * `scanf("%d", &n);`:合法,从键盘读取一个整数存入 `n`。 * `*p=n;`:此时试图通过指针 `p` 访问内存。但是,在此之前**并没有对指针 `p` 进行初始化**(即没有让 `p` 指向任何有效的内存地址)。`p` 是一个野指针,其值是随机的。对野指针进行解引用赋值(`*p = ...`)是极其危险的操作,会导致未定义行为,通常会引发程序崩溃。因此该选项错误。 * **D. `p=&n; *p=m;`** * `p=&n;`:将变量 `n` 的地址赋给指针 `p`。此时 `p` 合法地指向了 `n`。 * `*p=m;`:`*p` 代表指针 `p` 所指向的变量,也就是 `n`。这条语句等价于 `n = m;`。由于 `m` 的值为 5,执行后 `n` 的值也变为 5。 * 整个过程指针先初始化后使用,逻辑正确,语法合法。 **结论:** 只有选项 D 正确地初始化了指针,并安全地通过指针进行了赋值操作。 **正确答案:D**
题目纠错
c语言选择判断题库

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

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