自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 动态内存经典笔试题分析

这个代码的问题是在申请了一块空间,并将hello放到str中,但是我们接着free释放了这块内存,相当于这块内存还给了操作系统,我们就没有访问权限了,此时str里面不为NULL进入if判断语句内部,此时strcpy将world覆盖到原来hello的位置,但这属于非法篡改内存空间。其实这个题目相对来说比较好理解,p数组是GetMemory函数内部的局部创建的数组,当出了GetMemory函数内部,p数组内存就已经还给操作系统了,当我们再用str访问时,此时str就是野指针,属于非法访问。

2024-06-23 01:13:40 402

原创 c语言动态内存管理

咱们这样理解free释放内存空间的意义,比如说举一个不太正确的例子:王者荣耀是一个全天24小时运行的游戏,所以有一个无限的死循环,每一次我打开这个游戏,都需要向操作系统申请一块运行空间,然后在这块运行空间上面申请一块内存空间来存储我游戏运行产生的数据,当我下一次打开这个游戏所需要存储的游戏产生的数据可能跟上一次不一样,但我上一次申请的空间并未释放,此时又重新申请一块空间,即使内存足够大,总有一天内存会不够(俗称内存泄漏),所以猜测王者荣耀应该有一个类似free一类的函数或者代码段用来释放内存。

2024-06-22 02:03:25 553

原创 c语言字符函数和字符串函数

当第二种情况较为复杂,当我们比较一个字符,不相等,第一个字符串指针向后+1,第二个字符串不变,当第一个字符串指针来到第二个字符时,判断相等,两个字符串指针分别向后+1,当比到第一个字符串第四个字符时,发现不相等,此时,我们应当让让第二个字符串指针回到起始位置,第一个字符串指针回到当前比较的位置,下一次比较在当前比较位置指针+1处开始,这里我们其实不难发现。第二个需要注意的是返回值,当c为小写,则返回非零值(通常返回1,具体返回什么看编译器,反正为非零值),若为大写,则返回0。

2024-06-21 02:01:03 950 2

原创 深入理解指针

我们在test函数里面传递的参数是arr,而数组名是数组首元素的地址,既然是地址我们就能用指针变量来接收,sz1正常打印这没错,但是sz2就没这么简单了,因为test函数内部计算的是地址的大小而不是数组的大小,而此时编译环境为x86,即32位地址总线,大小为4个字节,一个元素大小也为4个字节,所以sz2为1。其实一维数组传递参数本质上就是传递地址。而第二个for循环,完成打印任务,p为首元素地址,刚开始进入循环i=0,*解引用得到第一个元素,随着循环的进行,i不断++,逐渐得到,打印数组的全部内容。

2024-04-01 21:09:55 814

原创 函数栈帧的创建与销毁

当进入Add函数内部,为了更好观察,右击鼠标,勾选显示符号名,看我们画框部分,在根据我们上面对push,mov的理解,当我们进入Add函数内部时。把[ebp+8]的值给eax,接着执行add指令,在eax里面加上[ebp+0Ch](监视后可得到这是20),此时eax里面的值就是30,此时接着执行mov操作,把eax的值给[ebp-8],也就是上面我们创建的变量z的值。我们按F10让程序走起来,在这之前,我们先监视esp,ebp的值,待F10,程序走完mov时,观察监视当中esp,ebp值是否相等。

2024-03-15 13:23:53 830 1

原创 用函数递归解决青蛙跳台与汉诺塔问题(c语言)

在分享完相关递归的思想后,下面步入正题。

2024-03-11 19:26:00 1083

原创 static和extern

当我们加上static修饰全局变量,发现编译器报错了,这是因为函数是具有外部链接属性的,当加上static,就变成内部链接属性了。这种情况适合函数不想被其他外部文件引用。

2024-01-11 17:16:44 436

原创 关于c语言中对函数相关基础概念的理解

一.函数的概念相信大家对函数并不陌生,在数学上尤为多见。其实c语言也一样,不过略微不同的是c语言当中的函数是指一小段完成特定任务的代码,一个较大的工程是由若干个函数组成,正因为有了函数的调用和引用,使得开发效率大大提高。二.库函数关于库函数相信大家并不陌生,如常见的printf(格式化打印),scanf(输入函数)。c语言标准中规定了c语言的各种语法规则,规定了一些常用函数的使用标准,称为。

2024-01-10 20:40:03 1012

原创 关于对scanf函数的基础了解

仔细观察这段代码,以及输出结果,我们不能得知,在scanf的占位符当中,scanf会自动过滤起首的空白字符,上面这段代码,过滤起首的空白字符,然后读取-13,,因为需要打印%d(整数)遇到.小数点,停止读取。,仔细看这段代码,我定义了一个长度为6的数组,当我在屏幕上输入abcdef这6个字符时,程序崩了,有人可能会好奇,这不就是6个字符嘛,并没有越界访问啊,其实在scanf函数当中,"\0"作为结束的标志会被scanf自动读取,这也就是为什么输入6个字符依旧越界访问。接下来说说,为什么scanf不安全?

2024-01-04 18:44:53 880 1

原创 分支和循环语句(基础,详细)

此时因为还在第一个for循环内,所以打印了一个符合要求的数值,接下来程序会回到第一个for循环开始,继续判断,重复以上步骤,直到打印完所有的符合要求的值,第一个循环结束,整个程序结束。,a++先使用后自增,为0进来,为假,因为||,所以继续向右执行,b先自增为3,为真,则d++不在执行。注意看逻辑运算符是&&,根据上面的总结,a初始化的值为0,进入下面的表达式,由于a++是先使用后自增,所以,a进入表达式为0(即为假),表达式短路,所以b,c,d打印的值不变,a因为自增了,所以a打印的为1。

2024-01-02 15:35:02 857

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除