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动态开辟的这块空间,也没有制空,造成了内存泄漏 ;
题目四 (free释放的时机)
请问运行Test 函数会有什么样的结果?
这道题比较简单 ,解析给在了代码注释中 ,大家注意查看 。
🎇结尾:
有关这四道经典的指针笔试题讲解就到此结束了,如果觉得文章对自己有所帮助,欢迎大家多多点赞收藏✨ ~
到此这篇关于C语言经典指针笔试题详解的文章就介绍到这了,更多相关C语言 指针内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
C语言中的指针 初阶
目录 1.指针是什么 2.指针和指针类型 3.野指针 3.1野指针成因 3.2如何规避野指针 4.指针的运算 4.1指针±整数 4.2指针-指针 4.3指针的关系运算 5.指针和数组 6.二级指针 7.指针数组 1.指针是什么 初学者都有一个疑问,那就是指针是什么?简单的说,就是通过它能找到以它为地址的内存单元. 地址指向了一个确定的内存空间,所以地址形象的被称为指针. int main() { int a = 10; int* pa = &a; return 0; } //pa是用来存放地址(
-
C语言运用函数指针数组实现计算器功能
本文实例为大家分享了C语言运用函数指针数组制作计算器的具体代码,供大家参考,具体内容如下 先来回顾一下概念: 指针数组 -- 存放指针的数组 函数指针 -- 存放函数地址的指针 函数指针数组 -- 存放函数指针的数组 接下来说说这次要制作的计算器的功能: 1.add -- 加法 2.sub -- 减法 3.mul -- 乘法 4.div -- 除法 0.exit -- 退出 具体来通过代码讲解: (1)首先写一个菜单程序,在运行程序时首先打印一次菜单. void menu() { printf(
-
C语言中的指针新手初阶指南
目录 1.指针是什么 2.指针和指针类型 3.野指针 3.1野指针成因 3.2如何规避野指针 4.指针的运算 4.1指针±整数 4.2指针-指针 4.3指针的关系运算 5.指针和数组 6.二级指针 7.指针数组 总结 1.指针是什么 初学者都有一个疑问,那就是指针是什么?简单的说,就是通过它能找到以它为地址的内存单元. 地址指向了一个确定的内存空间,所以地址形象的被称为指针. int main() { int a = 10; int* pa = &a; return 0; } //pa是用来
-
C语言指针之必须要掌握的指针基础知识
目录 一.指针概述 指针的创建 指针的大小 如何使用指针 二级指针 二.野指针 形成野指针的原因 如何规避野指针 三.指针的基本运算 指针± 整数 指针-指针 四.指针和数组 五.指针数组 总结 一.指针概述 指针是个变量,存放内存单元的地址(编号). 指针的创建 在定义指针变量的时候,在变量前面加上' * ',代表这个变量是一个指针,再往前面加上一个类型名,就代表指针的类型,称为XX指针. 指针的初始化: 使用&(取地址操作符)可以获得变量的地址,将其赋值给已经定义好的指针变量,需要它们的类型
-
C语言中的初阶指针详解
目录 1.指针是什么 2.指针和指针类型 3.野指针 3.1野指针成因 3.2如何规避野指针 4.指针的运算 4.1指针±整数 4.2指针-指针 4.3指针的关系运算 5.指针和数组 6.二级指针 7.指针数组 总结 1.指针是什么 初学者都有一个疑问,那就是指针是什么?简单的说,就是通过它能找到以它为地址的内存单元. 地址指向了一个确定的内存空间,所以地址形象的被称为指针. int main() { int a = 10; int* pa = &a; return 0; } //pa是
-
C语言进阶学习之指针
目录 1.指针概念回顾 2.字符指针 3.数组指针和指针数组 3.1数组指针的含义 3.2&数组名vs数组名 3.3数组指针 4.数组传参和指针传参 4.1一维数组传参 4.2二维数组传参 4.3一级指针传参 4.4二级指针传参 5.函数指针 6.函数指针数组 7.指向函数指针数组的指针 8.回调函数 总结 1.指针概念回顾 指针的基本概念: 指针是一个变量,用来存放地址,地址唯一标识一块内存空间.指针的大小是固定的4/8个字节(32位平台/64位平台).指针是有类型,指针的类型决定了指针的±整
-
C语言经典指针笔试题详解
目录 题目一(有关传值调用与非法访问) 题目二 (返回栈空间地址的问题 ) 题目三 (区别传值调用的传址调用) 题目四 (free释放的时机)
-
C语言中指针和数组试题详解分析
目录 数组题: 程序一(一维数组): 字符数组 程序二(字符数组): 程序三(字符数组): 程序四(字符数组): 程序五(字符数组): 二维数组 程序六( 二维数组): 指针题 程序七( 指针): 程序八( 指针): 程序九( 指针): 程序十( 指针): 程序十( 图): 程序十一( 指针): 程序十二( 指针): 程序十三( 指针): 指针 和 数组 试题解析 小编,在这里想说一下,c语言的最后一节 C预处理,可能还需要一些时间,因为小编,昨天才下载了虚拟机 和 linux 系统,还没开始安
-
C语言栈与队列面试题详解
目录 1.括号匹配问题 2.用队列实现栈 3.用栈实现队列 4.设计循环队列 1.括号匹配问题 链接直达: 有效的括号 题目: 思路: 做题前,得先明确解题方案是啥,此题用栈的思想去解决是较为方便的,栈明确指出后进先出.我们可以这样设定: 遇到左括号“ ( ”.“ [ ”.“ { ”,入栈. 遇到右括号“ ) ”.“ ] ”.“ } ”,出栈,跟左括号进行匹配,不匹配就报错. 上两句话的意思就是说我去遍历字符串,如果遇到左括号,就入栈:遇到右括号,就出栈顶元素,并判断这个右括号是否与栈顶括号相匹
-
C语言sizeof和strlen的指针和数组面试题详解
目录 一.概念 sizeof: strlen: 二.例题及解析 2.1 一维数组 2.2 字符数组 2.3 二维数组 三.总结 一.概念 sizeof: sizeof操作符的结果类型为size_t,(它在头文件用typedfe定义为unsigned int类型),计算的是分配空间的实际字节数.sizeof是运算符,可以以类型.函数.做参数 . strlen: strlen结果类型也为size_t(size_t strlen( const char *string )),但strlen是计算的空间
-
C语言指针笔试题全面解析
目录 前言 一.指针笔试题 1.题目如图: 2.题目如图: 3.题目如图: 4.题目如图: 5.题目如图: 6.题目如图: 7.题目如图: 8.题目如图: 总结 前言 通过8道指针笔试题的解析,可以充分的复习到指针的相关知识,并且题目中会结合许多之前的相关知识,希望通过本篇文章,对大家所学的知识进行一个复习. 提示:以下是本篇文章正文内容,下面案例可供参考 一.指针笔试题 1.题目如图: 逐条语句分析: ①.定义了一个大小为5的整型数组,并进行了初始化 ②.定义了一个整型指针变量ptr用来存放地
-
基于Java语言的递归运算例题详解
目录 一.实例演示:递归求N的阶乘 二. 递归调用练习 递归求1+2+3+……10的和 顺序打印一个数字的每一位 返回一个数组成本身的数字之和 求解汉诺塔问题 求斐波那契数列第N项 递归定义:一个方法在执行过程中调用自身, 就称为 "递归". 递归的必要条件: 1. 将原问题划分成其子问题,注意:子问题必须要与原问题的解法相同. 2. 递归出口. 一.实例演示:递归求N的阶乘 public class fac { public static int factorial(int x){
-
C语言 array数组的用法详解
目录 一维数组的创建与初始化 程序一: 程序二: 程序三 程序四(二维数组 - 二维数组 的 列 绝对不能 省略 ) 二维数组在内存中的存储 程序一 数组作为函数参数,怎么作? 实例:冒泡排序 数组名: 一维数组的创建与初始化 数组是一种相同类型元素的集合 程序一: #include<stdio.h> #include<string.h> int main() { 创建一个数组 int arr1[10];// [常量] 初始化 int arr[10]={1,2,3};不完全初始化,
-
用C语言递归实现火车调度算法详解
目录 1.代码 2.代码详解 3.用二叉树表示调用过程 4.思维导图 笔者在李云清版的<数据结构>中第二章遇到了这道经典的火车调度题,经过对一些前辈的代码进行学习,以下将这段火车代码进行分析详解,不对之处,还请各位大佬指示,不胜感激! 1.代码 题目如下: 2.8编号为1,2,3,4的四列火车通过一个栈式的列车调度站,可能得到的调度结果有哪些?如果有n列火车通过调度站,请设计一个算法,输出所有可能的调度结果. 算法运用的思想是运用栈+递归,算法的难点也在于此.先上代码: #include &l
-
C语言 链式二叉树结构详解原理
目录 前言 二叉树节点声明 二叉树的遍历 构建二叉树 1.前序遍历 2.中序遍历 3.后序遍历 二叉树节点的个数 二叉树叶子节点的个数 二叉树第K层节点个数 二叉树的高度/深度 二叉树查找值为x的节点 整体代码 前言 二叉树不同于顺序表,一颗普通的二叉树是没有增删改查的意义.普通的二叉树用来存储数据是不方便的.但是二叉树的一些基本实现结构,例如前序遍历,中序遍历...等等都是对我们学习更深层次的二叉树打下夯实的基础. 二叉树节点声明 typedef char BTDataType; typede
-
C语言结构体内存对齐详解
目录 实例一: 分析:存储结构图如下 实例二: 分析:存储结构如下 实例三: 分析:存储结构如下 实例四: 分析:存储结构图如下 总结 1.结构体内存对齐是指当我们创建一个结构体变量时,会向内存申请所需的空间,用来存储结构体成员的内容.我们可以将其理解为结构体成员会按照特定的规则来存储数据内容. 2.结构体的对齐规则 (1)第一个成员在相比于结构体变量存储起始位置偏移量为0的地址处. (2)从第二个成员开始,在其自身对齐数的整数倍开始存储(对齐数=编译器默认对齐数和成员字节大小的最小值,VS编译
随机推荐
- IOS 仿支付宝支付屏幕亮度变化机制
- Nginx服务器高性能优化的配置方法小结
- Oracle一个用户如何访问其它用户的表应用指南
- Android判断11位手机号码的方法(正则表达式)
- Python Web框架Flask中使用新浪SAE云存储实例
- android解析JSON数据
- Android中屏幕密度和图片大小的关系详解
- 女人VS编程_国庆快乐
- 详细解读Ruby当中的条件判断语句
- jquery带下拉菜单和焦点图代码分享
- js锁屏解屏通过对$.ajax进行封装实现
- javascript 全等号运算符使用说明
- 微信小程序 POST请求(网络请求)详解及实例代码
- php 基础函数
- java实现的RSA加密算法详解
- C#开发教程之利用特性自定义数据导出到Excel
- c# 类型转换
- 利用python的socket发送http(s)请求方法示例
- 跨站脚本攻击XSS(Cross Site Script)的原理与常见场景分析
- spring security CSRF防护的示例代码