C语言经典指针笔试题详解
目录
- 题目一(有关传值调用与非法访问)
- 题目二 (返回栈空间地址的问题 )
- 题目三 (区别传值调用的传址调用)
- 题目四 (free释放的时机)
- 结尾:
题目一(有关传值调用与非法访问) 请问运行Test 函数会有什么样的结果?
文章图片
答 :
程序运行会崩溃 ! 且存在内存泄漏 ;
原因:
- 1.str传给p的时候,是值传递,p是str的临时拷贝,所以当malloc开辟的空间起始地址放在p中的时候,不会影响str,str依然为空指针NULL ;
- 2.当str是NULL,strcpy想把 hello world 拷贝到str指向的空间时,程序就崩溃了。因为NULL指向的空间是不能直接访问的,造成了非法访问;
- 3.malloc开辟的空间没有free释放也没有制空,程序不结束就会一直存在,造成了内存泄漏;
文章图片
题目二 (返回栈空间地址的问题 ) 请问运行Test 函数会有什么样的结果?
文章图片
此类问题是 : 返回栈空间地址的问题
答 :
程序运行打印的是随机值 ;
原因 :
GetMemory函数返回的p是数组名,也就是数组首元素h的地址 ;
但是 ! GetMemory函数创建是在栈空间上创建的,return后会销毁,空间还给操作系统,虽然下面Test函数中的str存了h的地址,但是如果进行打印,原来的空间已经被销毁,打印的内容自然不是想要的内容;(虽然有可能依然打印出 hello world ,那是因为空间暂时还没被覆盖使用,本质上依然是错误的)。
题目三 (区别传值调用的传址调用) 请问运行Test 函数会有什么样的结果?
文章图片
答 :
虽然能成功打印出 hello world ,但是造成了内存泄漏 , 要记得 free 释放和制空 ;
原因 :
这里传的是str的地址,区别题目1的传值调用,这里是传址调用,形参的改变能影响实参;
malloc开辟的空间地址交给了str ,str指向了这块空间,所以strcpy能成功使用这块空间实现打印内容;
但是没有释放malloc动态开辟的这块空间,也没有制空,造成了内存泄漏 ;
【C语言经典指针笔试题详解】
题目四 (free释放的时机) 请问运行Test 函数会有什么样的结果?
文章图片
这道题比较简单 ,解析给在了代码注释中 ,大家注意查看 。
结尾: 有关这四道经典的指针笔试题讲解就到此结束了,如果觉得文章对自己有所帮助,欢迎大家多多点赞收藏? ~
到此这篇关于C语言经典指针笔试题详解的文章就介绍到这了,更多相关C语言 指针内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言浮点函数中的modf和fmod详解
- C语言中的时间函数clock()和time()你都了解吗
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- 这份史上最经典的3大学习方法,清华北大学霸都在用!
- 我们为什么喜欢看《古惑仔》,它到底经典在哪()
- C语言解方程的根和判断是否是闰年
- C语言的版本比较