单选题
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语言选择判断题库
相关题目
单选题
1、第189题 (1.0分) 题号:724 若调用fputc函数输出字符成功,则其返回值是()。
单选题
1、第188题 (1.0分) 题号:159 下列程序的输出为()。
单选题
1、第187题 (1.0分) 题号:722 利用 fseek 函数可以实现的操作是()。
单选题
1、第186题 (1.0分) 题号:576 设以下变量均为int类型,则值不等于7的表达式是()。
单选题
1、第185题 (1.0分) 题号:142 以下程序的输出结果为()。
单选题
1、第184题 (1.0分) 题号:559 一个算法应该具有”确定性”等5个特性,下面对另外4个特性的描述 中错误的是()。
单选题
1、第183题 (1.0分) 题号:152 以下程序的运行结果是()。
单选题
1、第182题 (1.0分) 题号:581 sizeof( )是()。
单选题
1、第181题 (1.0分) 题号:508 int a=1,b=2,c=3; if( )b=a;a=c;c=b;则c的值为()。
单选题
1、第180题 (1.0分) 题号:169 下列说法不正确的是()。
