C语言笔试题解析:局部变量、全局变量、内存分配与类型大小
需积分: 44 60 浏览量
更新于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 浏览量
2012-08-05 上传
2024-05-05 上传
物联网_赵伟杰
- 粉丝: 46
- 资源: 3967
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载