C语言笔试题解析:局部变量、全局变量、内存分配与类型大小
需积分: 44 40 浏览量
更新于2024-08-07
收藏 928KB PDF 举报
"这是一份关于C语言的程序分析题,包含了面试题和经典编程例题,主要涉及内存管理、数据类型、运算符优先级、结构体与联合体的使用,以及动态内存分配等知识点。"
1. **局部变量、全局变量与动态内存**
- 局部变量在函数内部定义,它们存储在栈区,当函数执行完毕后会被自动释放。
- 全局变量在整个程序执行期间都存在,存储在数据区。
- 动态申请的数据使用`malloc`、`calloc`或`realloc`等函数获取,存储在堆区,需要程序员手动释放。
2. **数据类型与内存大小**
- `union DATE`中,最大的成员是`int k[5]`,占用20个字节,因此`UNION DATE`的大小是20字节。
- `struct data`中,各成员分别占用空间:`int`是4字节,`DATE`是20字节,`double`是8字节,所以结构体`struct data`的大小是4 + 20 + 8 = 32字节。
- 因此,`printf("%d", sizeof(struct data) + sizeof(max))`的执行结果是52。
3. **指针运算**
- 在32位系统中,`unsigned char *p1`增加5会按字节增加,所以`p1+5`等于`0x801005`。
- 而`unsigned long *p2`增加5会按`long`类型字节数增加,通常`long`是4字节,所以在32位系统中`p2+5`等于`0x810014`。
4. **运算符优先级**
- 表达式`k *= i + j`中,先计算`i + j`得到20,然后`k`乘以20,最终`k`的值是60。
5. **宏定义**
- `#define DOUBLE(x) x + x`这个宏定义将`DOUBLE(5)`替换为`5 + 5`,所以`i = 5 * DOUBLE(5)`的结果是`i = 5 * 10 = 30`。
6. **动态内存分配**
- 当`malloc(0)`返回非空指针时,虽然没有分配到内存,但条件判断`(ptr=(char*)malloc(0))==NULL`失败,程序将输出`Got a valid pointer`。
7. **字符编码与ASCII码**
- 字符`m`被赋值为`'B' + 32`,在ASCII码表中,`'B'`是66,加上32等于98,对应字符`'b'`,所以输出是`b`。
8. **动态内存分配的使用**
- 使用`malloc`为`struct node`类型分配内存,正确填写的语句应为`p = (struct node *)malloc(sizeof(struct node));`,这样确保了分配足够的内存来存放`struct node`类型的数据。
这些题目涵盖了C语言的基础知识,包括内存管理、数据类型、运算符优先级、结构体与联合体、指针运算以及宏定义等,对于学习和复习C语言非常有帮助。
1203 浏览量
1807 浏览量
219 浏览量
2024-05-05 上传
物联网_赵伟杰
- 粉丝: 47
最新资源
- diskusage工具发现磁盘空间占用大户
- 易语言实现按钮滑动效果及延时优化技巧
- 易语言实现ASM取启动时间的核心源码
- PSCAD线路故障仿真模型:学习与模型搭建指南
- HTML压缩包子文件技术探讨
- Vagrant上部署LAPP环境示例教程
- Kubeflow 1.2.0版本文件压缩包介绍
- MATLAB实现的Crowding模型分析工具包
- zmote小部件PCB设计与制作教程:原理图与Gerber文件
- MATLAB多线主成分分析PCA代码实现与应用
- 全面技术项目源码共享:ASP+ACCESS即时查询系统
- zlib 1.2.11版本压缩包免费下载指南
- 华为交换机Web管理文件下载指南
- lttcpp-xls-数据集: 训练集文件解析与应用
- Jenkins-PHP Docker:轻松构建PHP环境的Docker模板
- Heka插件开发:解耦与指标集成的探索