资讯专栏INFORMATION COLUMN

4道经典指针笔试题讲解 ~

tianren124 / 1903人阅读

摘要:结尾有关这四道经典的指针笔试题讲解就到此结束了,如果觉得文章对自己有所帮助,欢迎大家多多点赞收藏

?前言 :

今天博主来讲解4道经典的指针笔试题,很多朋友没有深刻理解函数传参知识都会在这些题目上出错,下面话不多说,我们开始 ~

题目一(有关传值调用与非法访问)

请问运行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动态开辟的这块空间,也没有制空,造成了内存泄漏 ;

题目四 (free释放的时机)

请问运行Test 函数会有什么样的结果?

这道题比较简单 ,解析给在了代码注释中 ,大家注意查看 。

?结尾:

有关这四道经典的指针笔试题讲解就到此结束了,如果觉得文章对自己有所帮助,欢迎大家多多点赞收藏✨ ~

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121853.html

相关文章

  • C语言------(8针笔试题全面解析

    摘要:因为指针指向的是整个数组,所以它的类型是数组指针,所以我们在它的前面进行强制类型转换,把它转换为类型,然后再存放到指针变量内部。 前言 通过8道指针笔试题的解析,可以充分的复习到指针的相关知识,并且题目中会结合许多之前的相关知识,希望通过本篇文章,对大家所学的知识进行一个复习。 提示:以下...

    vspiders 评论0 收藏0
  • 针进阶—针和数组笔试题解析[建议收藏](二)

    摘要:指针笔试题笔试题上述代码运行结果是什么大家可以先思考一下答案如下代码运行结果如下笔试题假设的值为。欢迎大家点赞支持和指针 目录 写在前面指针笔试题笔试题1笔试题2...

    LuDongWei 评论0 收藏0
  • 深入理解C语言针——挑战C针笔试题 (和bug郭一起学C系列)

    摘要:所以是数组指针,而是指针数组。因为对一个二维数组,可以不知道有多少行,但是必须知道一行多少元素。当二维数组数组名传参,形参接收时,数组的行可以省略,列不能省略,如果省略了列,我们就无法知道当指针加减跳过几个字节。 ...

    miracledan 评论0 收藏0
  • Web前端经典面试试题(三)

    摘要:包含基于和标准的表示使用进行动态显示和交互使用与服务器进行异步通信使用绑定一切。重定向表示要完成请求,需要进一步操作。方法可将一个函数的对象上下文从初始的上下文改变为由指定的新对象。 一. 什么是Ajax??? 术语Ajax用来描述一组技术,它使浏览器可以为用户提供更为自然的浏览体验。 Ajax它是Asynchronous JavaScript + XML的简写 定义Ajax: ...

    DrizzleX 评论0 收藏0
  • Web前端经典面试试题(三)

    摘要:包含基于和标准的表示使用进行动态显示和交互使用与服务器进行异步通信使用绑定一切。重定向表示要完成请求,需要进一步操作。方法可将一个函数的对象上下文从初始的上下文改变为由指定的新对象。 一. 什么是Ajax??? 术语Ajax用来描述一组技术,它使浏览器可以为用户提供更为自然的浏览体验。 Ajax它是Asynchronous JavaScript + XML的简写 定义Ajax: ...

    JackJiang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<