c/c++
【c】为啥有时传参要传指针?实参形参到底是个啥?栈帧和他俩到底啥关系?
前言:🎅想必在学习c的过程中,你可能产生过这样的疑惑,为什么在进行传参时总是会选择传入一个指针呢😟?例如你想完成一个add函数,其功能实现为c=a+b,但是在返回值为void的情况下传入a,b两个参数却改变不了c。也许老师给你解释的是形参是实参的拷贝,但你却不是很理解,也许你还遇到过这样的问题:1.局部变量是如何创建的?为何局部变量不初始化会出现随机值?2.在函数调用时参数如何传递?又以何种方式传递?3.函数返回值是如何带回主函数?那么就接着往下看吧。😜
🌈tip:因为不同的编译器带来的反编译效果不同,所以当你们进行测试时会与文章展示有所差异,但不影响理解。推荐vs2013,对整个栈帧创建和销毁的过程展示的更加全面。接下来就以一份以vs2013为平台进行编译的代码进行分析。
🚗准备
🚎栈与栈帧
栈在数据结构这一课也算是一个典型的例子,有着先进后出的明显特点。栈被当作一种特殊的容器,数据可以被压入栈(push),也可以将压入的数据弹出(pop)。
在经典的操作系统中,栈总是向下增长(由高地址向低地址)的。
栈可以认为是CPU寄存器里的某个指针所指向的一片内存区域。在我们常 ...
c/c++
【c】关于指针,你应该知道这些
🏐tips: 本文部分内容改编自《c和指针》。
📰引入
🏉内存与地址
在了解指针前,我们需要先理解内存与地址的含义。
在c和指针一书中,很形象的将计算机的内存比作是一排排的房屋,至于房屋有多大,取决于你所处的环境。计算机内存由以亿记的位(bit)组成,每一个bit都可以容纳下0或者1,但如果将一个bit位作为一个房屋,那容纳的量未免太小了。所以我们通常会将许多位共同组成一栋房子,这样的房子被我们称为字节(btye)。一个字节容纳八个位。字节也可以由多个组成更大的单位——字,每个字都有2字节或者4字节组成。需要注意的是,虽然字节或者字会包含多个比特位,但通常我们只认为他只有一个地址。
上图将三者关系做了一个解释。
当我们知道了一个地址,就可以通过调用这个地址来获得存储在这个地址上的值。但这样做是很笨拙的,因为我们在写程序时不会也不能记住每一个需要被调用的值的地址,所以我们常常使用一个名字来代替地址。
这里的1个单位代表1个字节。
正如上面所写的,他们只可以有一个地址。这个地址通常是左边第一个位。
在介绍这一块时,c和指针一书还额外提了一点——不可以简单的通过检查一个值来判断其 ...
java
【java】以简单的图书管理系统讲清楚类,对象,继承,多态与接口的相关知识点
【前言】🍊以图书管理系统的实现,来讲清楚一些java入门学习阶段非常重要的概念与思想。包括类与对象,接口与继承,还有多态等等基础且重要的知识点。
⚽️ 准备
构建一个简单的图书管理系统,可以大致分为三个package。
user包
book包
operation包
也就是分为用户,书,操作功能。
其中user包包含user类,regularuser类,adminuser类。
book包包含book类,booklist类。
operation包包含addbook类,deletebook类,findbook类,borrowbook类,returnbook类。
🏀类与对象
上面我们提到了类,那什么是类?
java是一门面向对象的语言。面向对象就是依靠对象的交互来完成一件事。使用面向对象的思路来写程序,会更加友好。
举个例子,比如你打算去菜市场买菜,你需要准备菜篮子,换好衣服,规划好一条路线,沿途会经过哪些商贩,又会去买哪些蔬菜······,但是如果使用外送服务,你只需要下单时注明需要什么菜,几时送到什么地方即可。在这个过程里,压根不会关心菜是怎么买来的。又比如洗衣服,传统的洗衣过 ...