自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 函数的形参是指针所遇到的一些问题

之前在看到这个结果的时候我很疑惑,我想通过函数去改变指针指向的地址,发现无法改变,我以为将指针add当作实参传入函数中后,形参addr和实参add指向同一块地址,我们改变addr的指向就改变了add的指向,结果告诉我们不是这样,在我经过查询资料以及思考,想出来可能的原因。,这时候addr就指向add的地址 (假设0x666和0x999分别为add和addr的地址),*addr=&a就相当于让add指向&a。我们还可以通过二级指针,达到预期的效果。我们可以利用引用达到预期的效果(

2023-09-24 20:26:42 70

原创 左值与右值

于是我们在家门口建了一个大水缸,能储存好多的水,每天只需要从井里打水把水缸填满,这样我们需要用水的时候只需要在家门口打水即可,这样就大大的提高了效率。addl %edx,%eax的意思就是把这两个寄存器里的值相加,保存在eax中,紧接着把eax的值转移到-4(%rbp)也就是c的内存中去。因为a+b的值是存储在寄存器中的,不是在内存中的,左值一定是在内存中有确定位置的,所以a+b不能作为左值。先把1放到距离栈顶-12的位置,然后把2,3分别放到距离栈顶-8,-4的位置,自此p1的赋值操作完成。

2023-09-24 15:36:06 76

原创 函数回调和仿函数

尽管函数指针被广泛应用于实现函数回调,但是C++提供了一个重要的实现回调函数的功能,俺就是函数对象,functor翻译为函数对象,伪函数,他是重载了“()”操作符的普通类对象,从语法上来讲,它与普通函数行为类似。回调函数就是允许用户把需要调用的方法的指针作为参数传递给一个函数,以便该函数在处理相似事件的时候可以灵活的使用不同的方法。我们定义了一个返回类型为int 的函数指针指向函数max(函数指针在写的时候返回值和参数列表都要和需要指向的函数一致)。这就是一个名为func的函数指针。

2023-09-18 21:16:08 100

原创 char*,char [],const char*,string之间的区别

在之前我看到string接受字符串没问题,但是用char*接受就会出现这个问题,导致我认为const char*就是string,直到最近我才发现他们之间的区别.const修饰类型,可以改变指针p的指向,但是不能改变指针指向内存的值,这个涉及到。string是字符串类型,是C++中封装的一个char*类,在C语言中没有字符串,用字符数组去存储。假如const char*和string是一个东西,那么就会输出string。const放在*后面,可以改变p指向内存的值,但是不能改变指针指向。

2023-09-06 21:26:15 121

原创 数组指针和指针数组以及数组首元素地址问题

这是一个二级指针,指向的是一级指针(数组)的地址,q+1相当于p+2,直接移动了一个整个数组的位置,指向数组第二个元素后一个位置。所以上面输出的内容都一样,

2023-09-06 20:56:46 70

原创 赋值运算符重载的常见错误

如果一个类有指针成员,而且使用了动态内存分配,那么一定要定义自己的拷贝构造函数【要使用深拷贝】,避免调用自动生成的拷贝构造函数。如果没有自定义的拷贝构造函数,而且这个类又有指针成员时,就会调用自动生成的拷贝构造函数,导致浅拷贝。如果析构函数中,对这个指针指向的内存做了释放,那就导致数据损坏或崩溃!将会没有效果,编译器不会识别为赋值运算符的重载,1)赋值运算符的重载,一定要使用引用参数。因为自动生成的拷贝构造函数,是浅拷贝!就是:参数要使用引用!

2023-08-24 22:35:14 43 1

原创 拷贝构造函数调用时机

根据上面描述的拷贝构造函数调用时机,我们可以判断他们的调用拷贝构造函数的情况如下。如果h2已经初始化,然后用h2=h1的话相当于将h1赋值给h2,这时候调用。例如 Human h2(h1)和Human h2=h1。但是当我们运行的时候会发现。

2023-08-24 18:24:06 159 1

原创 位图算法,最快的算法

有很多不重复的整数, 其中最大值不超过40亿, 最小值是0.使用2个字节,表示16个数(0-15)的状态(有或者没有)数据为【5,1,7,15,0,4,6,10】,则。要求判断某个指定的整数, 是否在这个集合中.

2023-08-17 22:05:33 27 1

原创 C++游戏开发《天天酷跑》

我们设定跳跃幅度heroJumpOff和跳跃高度heroJumpMax,当按下跳跃键空格时,如果heroY小于最大高度,heroJumpOff=-12,heroY-12就可以实现向上移动,通过while循环一直跳到最大高度,当heroY小于最大高度时,让heroJumpOff=12实现下降,当下降到一定位置时,让heroJumpOff=-12,heroJump=false,以供下次跳跃使用。,当时间累加到30ms的时候我们刷新一次图片,当timer>30的时候,updata=true,刷新页面。

2023-08-08 16:30:01 103

原创 otto电棍 推箱子游戏实现(包含各种圣经)

代码里面包含了许多音频图片,只复制粘贴无法运行代码,我不知道这里面怎么放文件,所以有需要的OTTO粉可以私信我,我把所需要的文件发给你。里面还有许多彩蛋,谁玩谁知道。

2023-07-31 23:24:23 81 1

原创 浅谈全局变量,局部变量,静态变量以及内存分配

给变量分配动态的存储空间的方式,比如说我们在函数里面定义了一个局部变量,只有在执行这个函数的时候才会给这个变量分配内存空间,函数执行完毕后就释放掉这个局部变量的内存。,我们可以把变量分为全局变量和局部变量,全局变量的作用域是在声明变量之后的所有地方都可以使用。包括 函数的形参,未加static的局部变量,函数调用返回的值。就给变量分配内存,程序运行完毕释放内存。这些变量在整个项目中一直存在。,我们可以把变量进行分类为【

2023-07-28 12:51:41 213 1

原创 函数返回值使用指针

如果下面有别的函数调用sum的空间,那么sum会返回一个未知的地址,所以在实际开发中,如果需要使用函数返回一个地址,不能使用在栈区的局部变量去存储地址。用函数返回外部函数局部变量的地址。比如上面代码的add(),因为。

2023-07-28 11:24:59 29 1

原创 实现含有中文字符的字符串逆转,如: “我是小萌新” 转换成“新萌小是我”

本题乍一看好像很简单,我们可以通过定义一个for循环,交换首尾元素实现逆序,这样对于元素是数字或者字母的字符串确实可以,但是要实现中文字符换的逆序的话则会出现很多问题,假如定义一个字符数组char str[ ]="abced";我们交换str[0]和str[ 4],str[1]str3]即可实现,因为。如果是中文,我们让p1赋值给p2-1的位置,然后p1向前移动一个字节,p2向前移动一个字节,将p1赋值给p2。所以我们要想实现逆序,就得把。的位置,这样p2的长度刚好和数组s相同,作为交换字符换的容器。

2023-07-26 11:31:12 46 1

原创 函数返回值和返回引用的区别 int&func()与int func()

的变量都是局部变量。

2023-07-23 15:36:13 170

原创 C++primer习题集

练习6.21:编写一个函数,令其接受两个参数:一个是int型的数,另一个是int 指针。函数比较int的值和指针所指的值,返回较大的那个。在该函数中指针的类型应该是什么?是随着系统的时间设置随机数种子,rand()是根据种子生成随机数。

2023-07-15 20:28:06 203 1

原创 C++primer习题集

练习6.17:编写一个函数,判断string 对象中是否含有大写字母。编写另一个函数,把 string 对象全都改成小写形式。在这两个函数中你使用的形参类型相同吗?比如第一个函数中 const string&str。第二个函数需要修改传入参数的内容,所以我们就使用非常量引用.3.for(auto & c:str)是修改str的元素。1.我们在写函数的时候要养成好的习惯,如果。可以看出随着c的改变,str的元素也在随之改变。这个语句的含义是将str的元素拷贝到c中。

2023-07-15 17:56:02 164 1

原创 第9节极速调用之内联函数

在计算机底层做很多准备工作(保护原来的执行环境,切换到新的执行环境)2)这个函数的使用频度非常高,比如在一个循环中被千万次地使用。使调用内联函数的程序,变得“臃肿”,消耗调用函数的“栈”空间。1)内联函数中的代码应该只是很简单、执行很快的几条语句。数的定义(即整个数体),而不能只出现内联函数的声明。就相当于内联函数的函数体, 在调用处被重写了一次。每调用一次函数,就会为这个函数分配一个“栈”,就会直接将整个函数体的代码插入”调用处”,以避免函数调用的开销, 获得更快的时间。(避免重复多次写相同的代码)

2023-07-13 16:19:52 41 1

原创 函数的栈空间

结果显示无法打印,直接退出程序。但是这种情况比较少见,一般也没有人会定义这么大的数组,那么下面一种情况新人就很容易犯。当n=3时,由于函数的递归,test函数一共被执行了三次。每一次打印的地址都不一样。我们可以看到当n=12时退出程序,因为这时候栈区已满,无法继续开辟空间供函数使用。,这块内存区域,专门给这个函数使用。这块内存区域,就叫做“当函数调用的次数过多,就会产生爆栈。例如把n设为20,结果如下;

2023-07-12 23:22:10 54 1

原创 输入一句话,然后把这个字符串以单词为单位,逆转输出。

输入一句话,然后把这个字符串以。”,实现速度最快,移动最少。,逆转输出,比如将“

2023-07-12 16:28:02 75 1

原创 C++数字逆序

【代码】C++数字逆序。

2023-07-12 11:33:40 296 1

原创 二进制转化为十进制

【代码】二进制转化为十进制。

2023-07-12 11:24:46 126 1

原创 十进制转二进制

【代码】十进制转二进制。

2023-07-12 10:37:54 57

原创 不清空输入缓存区的后果

使用cin.ignore()用来清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响。ffulsh(stdin)也可以消除缓存区,但是在有些编译器无法使用,例如VS。无论我们使用cin还是scanf进行输入时,都必须使用回车将输入的内容送入输入缓存区,此时scanf读取了绣东,这个函数也同样可以清除缓存区。

2023-07-06 16:00:51 46

原创 cin.fail(),cin.clear(),cin.ignore的用法以及输入缓冲区

输入缓冲区:这是一个我们键盘输入与编译器读取之间的一个缓冲区域,编译器并不是直接读取我们在键盘上输入的信息,而是从输入缓冲区中读取的信息。我们使用scanf、getchar等输入函数时,并不是直接从键盘中去获取,而是由键盘打到输入缓冲区中,然后scanf,getchar等输入函数再从输入缓冲区里面去获取数据。类似于输出函数,输入函数(scanf,getchar)也存在输入缓存,并且这些输入函数属于阻塞函数。

2023-07-06 15:24:48 1081 1

原创 VS2022,编写C/C++时没有与参数列表匹配的重载函数实例

E0304

2023-06-30 10:17:32 8430

空空如也

空空如也

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

TA关注的人

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