C语言经典指针笔试题详解

 更新时间:2021年10月08日 09:40:34   作者:小轩在不在哟  
今天博主来讲解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 函数会有什么样的结果?

在这里插入图片描述

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

🎇结尾:

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

到此这篇关于C语言经典指针笔试题详解的文章就介绍到这了,更多相关C语言 指针内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux环境g++编译GDAL动态库操作方法

    Linux环境g++编译GDAL动态库操作方法

    下面小编就为大家带来一篇Linux环境g++编译GDAL动态库操作方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • C语言SetConsoleTextAttribute函数使用方法

    C语言SetConsoleTextAttribute函数使用方法

    这篇文章介绍了C语言SetConsoleTextAttribute函数的使用方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • C++容器适配与栈的实现及dequeque和优先级详解

    C++容器适配与栈的实现及dequeque和优先级详解

    这篇文章主要介绍了C++容器适配与栈的实现及dequeque和优先级,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • C语言之实现栈的基础创建

    C语言之实现栈的基础创建

    这篇文章主要介绍了C语言之实现栈的基础创建,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 显示任何进程加载的DLL文件的代码

    显示任何进程加载的DLL文件的代码

    c语言实现的显示任何进程加载的DLL,方便开发软件的朋友
    2013-05-05
  • C语言单链表实现方法详解

    C语言单链表实现方法详解

    这篇文章主要介绍了C语言单链表实现方法,结合实例形式分析了基于C语言的单链表定义、创建、添加、删除、排序、打印等操作技巧,并附带了相关的优化算法,需要的朋友可以参考下
    2018-04-04
  • Protocol Buffer技术深入理解(C++实例)

    Protocol Buffer技术深入理解(C++实例)

    C++实例Protocol Buffer技术详解,感兴趣的朋友可以了解下
    2013-01-01
  • C++读取文本文件中的汉字乱码情况原因及解决

    C++读取文本文件中的汉字乱码情况原因及解决

    本文介绍简体中文Windows操作系统中,C++读取文本文件中的汉字乱码情况原因及解决,文中通过代码和图文给大家介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-01-01
  • 浅谈C语言转义字符和格式控制符

    浅谈C语言转义字符和格式控制符

    下面小编就为大家带来一篇浅谈C语言转义字符和格式控制符。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • 剖析C++编程中friend关键字所修饰的友元函数和友元类

    剖析C++编程中friend关键字所修饰的友元函数和友元类

    这篇文章主要介绍了剖析C++编程中friend关键字所修饰的友元函数和友元类,友元了以后在外部就可以访问到正常情况下无法访问到的私有属性和方法,需要的朋友可以参考下
    2016-01-01

最新评论