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

1、第70题 (1.0分) 题号:676 以下只有在使用时才为该类型变量分配内存的存储类说明是()。

A
 auto和 static
B
 auto和 register
C
 register和 static
D
 extern和 register

答案解析

正确答案:B

解析:

这道题考查的是 C 语言中不同存储类说明符(Storage Class Specifiers)对变量内存分配时机和方式的影响。我们需要分析各个选项中提到的关键字特性,找出符合“只有在使用时才为该类型变量分配内存”这一描述的选项。 **1. 核心概念解析:** * **auto(自动变量)**: * 这是局部变量的默认存储类别。 * **分配时机**:当程序执行进入定义该变量的代码块(如函数或复合语句)时,系统会在栈(Stack)上为其分配内存;当程序执行离开该代码块时,内存自动释放。 * **特点**:它是动态分配的,确实是在“使用”(即进入作用域)时才分配内存。 * **register(寄存器变量)**: * 建议编译器将变量存储在 CPU 的寄存器中,以提高访问速度。 * **分配时机**:同样是在进入其作用域时尝试分配(如果寄存器够用,则存入寄存器;如果不够,编译器通常会将其退化为普通的 auto 变量存储在栈中)。 * **特点**:它也是局部的、动态的,生命周期局限于其作用域内,符合“使用时分配,用完释放”的动态特征。虽然严格来说寄存器不是“内存”(RAM),但在 C 语言存储类别的语境下,它和 auto 一样,不属于静态分配,而是随作用域动态存在。 * **static(静态变量)**: * **分配时机**:在程序编译链接阶段或程序启动时,系统就在静态数据区(Static Data Area)为其分配了固定的内存空间。 * **特点**:无论是否正在“使用”该变量,它的内存始终存在,直到程序结束。因此,它**不符合**“只有在使用时才分配内存”的描述。 * **extern(外部变量)**: * 用于声明一个在其他文件中定义的全局变量。 * **分配时机**:全局变量的内存也是在程序启动时就在静态数据区分配好的。 * **特点**:内存始终存在,**不符合**题意。 **2. 选项分析:** * **A. auto 和 static**:`auto` 符合动态分配,但 `static` 是静态分配(程序运行期间一直占用内存),故排除。 * **B. auto 和 register**:`auto` 是典型的栈上动态分配;`register` 虽然旨在存入寄存器,但其生命周期和作用域管理与 `auto` 一致,都是进入作用域时“激活/分配”,离开时“销毁/释放”。在没有更精确的“栈分配”选项时,这两个都属于非静态的、随作用域动态存在的存储类。这是最符合题意的组合。 * **C. register 和 static**:`static` 是静态分配,故排除。 * **D. extern 和 register**:`extern` 指向的全局变量是静态分配的,故排除。 **3. 结论:** 题目中的“只有在使用时才为该类型变量分配内存”主要强调的是**动态存储期**(Automatic Storage Duration),即变量的内存生命周期与其作用域绑定,进入作用域分配,离开作用域释放。`auto` 和 `register` 都具有这种特性,而 `static` 和 `extern` 关联的变量具有静态存储期,内存自始至终都存在。 因此,正确答案是 **B**。
题目纠错
c语言选择判断题库

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

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