一道C++考试题目
来源:互联网 发布:派派软件下载 编辑:程序博客网 时间:2024/04/29 18:29
昨天监考,发现有一道C++题目挺有意思,今天就凭着记忆写了程序,发现还挺有意思,分享一下了。
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
char* mem(char *a, int num)
{
a=(char*)malloc(num * sizeof(char));
memcpy(a,"hello",num);
return a;
}
int main()
{
char* a = NULL;
mem(a, 100);
printf("%s", a);
free(a);
system("pause");
return 1;
}
这样得到的结果输出为NULL,题目要求分析原因。
传统的误区是:mem函数进行的传址操作,因此最终的结果应该是hello。
但实际上,mem中的变量a仅仅是对参数a的一个拷贝,即变量a中存储的是参数a的地址,但是进行memcpy之后,变量a存储的地址变了,但是原本参数a中存储的数据是没有改变的。因此最终的输出仍然为NULL。
其实,出题者是煞费苦心的,因为卷纸上面是没有free(a)这样一句话的,我想估计是给同学们进行提示的吧。
(呵呵,没想到自己的第一篇博客就交给了这个题目了)
- 一道C++考试题目
- 一道C语言题目
- 一道有趣的C#考试题目
- 一道有趣的C#考试题目
- 一道有趣的C#考试题目
- 一道有趣的C#考试题目
- 一道计算机二级考试的题目
- 一道C考试逻辑题
- C考试题目
- 一道C语言的题目
- 每天一道C语言题目
- 2003年11月系分考试上午试题的一道题目
- C/C++/C#考试面试题目
- 一道C语言的内存管理题目
- 请教一道C++的题目
- 每天一道C语言题目7/5
- 【C语言】一道给力的题目
- 一道C语言题目引发的讨论
- ipc$入侵非常好的文章
- 写一个操作系统
- Makefile常用函数总结
- IN4007和IN4148的用途
- Struts2输入校验以及错误信息处理(1)——用Action中定义的validate()方法进行校验
- 一道C++考试题目
- QQ输入法 for iPhone2.3
- qemu源码分析之Makefile
- nodejs安装过程
- JavaWeb 开发-国际化-DateFormat类(国际化日期)
- web 开发了解
- MDI文件如何打开
- 关于android GridView的用法
- Android常用控件总结