C语言笔试题解析:局部变量、全局变量、内存分配与类型大小
需积分: 44 39 浏览量
更新于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语言非常有帮助。
2019-01-04 上传
点击了解资源详情
129 浏览量
2024-05-05 上传
物联网_赵伟杰
- 粉丝: 46
- 资源: 3957
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器