- 博客(16)
- 收藏
- 关注
原创 简述strcpy、sprintf与memcpy的区别?
如图,strcpy的复制大小由函数('\0'停止)决定,并且只能是字符串类型,memcpy的复制由程序员输入的sizeof大小决定(不超过创建的数组大小或者所malloc的内存大小),对数据类型没有要求;b.memcpy将源内存中的数据按字节复制到目标内存中,可以复制任意类型的数据,不限于字符串。b.strcpy会复制源字符串直到遇到空字符‘\0’,并将其复制到目标字符串中,包括空字符。b.sprintf将格式化的数据根据指定的格式写入到目标字符串中。a.sprintf用于将格式化的数据写入字符串中。
2024-06-09 18:15:33
336
1
原创 C++中将引用作为函数的返回值类型的格式、好处和需要遵守的规则?
1.返回引用时要确保返回的对象在函数调用结束后仍然有效,不能返回指向局部对象的引用。2.避免返回将亡值的引用,因为将亡值在表达式结束后会被销毁,返回其引用将导致悬空引用。1.避免对象的拷贝:返回引用可以避免在函数返回时进行对象的拷贝操作,提高程序的性能。2.允许修改返回值:返回引用允许在函数外修改函数内的变量,方便了数据的共享和交换。3.避免返回局部对象的引用,因为局部变量在函数执行结束后会被销毁,将造成悬空引用。
2024-06-09 17:49:01
286
原创 简述c++中的指针参数传递和引用参数传递?
2.引用:可以直接修改参数的值,不需要解引用;不允许传递空引用,因此不需要判空,无法修改引用指向的对象。1.指针:可以通过指针解引用修改参数的值;允许传递空指针,但需要在函数内进行判空;
2024-06-09 15:55:51
111
原创 C++内联函数是否做参数类型检查?编译还是运行?
内敛函数在编译时会进行参数类型检查。内联函数是在调用点展开的,相当于将函数体直接插入到调用处。因此,编译器会对内敛函数的参数进行类型检查,确保调用时传递的参数类型与函数声明中的参数类型匹配。
2024-06-09 15:52:23
118
原创 #define和const的区别?
2.#define只是简单的字符串替换,没有对类型的检查;const有对应的数据类型,需要进行判断。1.#define在编译的预处理阶段起作用,而const是在编译、运行的时候起作用。3.由于#define是在预编译起作用,所以不能进行调试;而const可以进行调试。
2024-06-09 15:48:56
116
原创 C++中typedef和define的区别?
1.typedef是在编译器解析时进行处理,他会创建一个新的类型别名,具有与原类型相同的作用域,#define是预处理器指令,简单的文本替换。
2024-06-09 15:48:29
76
原创 简述函数的调用过程?
2.为被调函数传递数据(进行实参和形参的结合),同时形参获得存储空间;3.主调函数运行状态和返回地址入栈(现场保护);接着给局部变量分配空间。5.当被调函数执行完成,释放被调函数中局部变量占用的栈空间。6.继续主调函数后续语句。4.执行被调函数函数体。
2024-06-09 15:48:15
114
原创 说一下堆区和栈区,为什么要划分出两个区,堆快一点还是栈快一点?
根据堆区和栈区各自的特点,在编写程序时可以根据需求实现而选择用堆区还是栈区,将堆区和栈区划分,首先是因为他们特点不同,需要用哪个就可以用哪个,假如不划分堆区、栈区,那么有可能造成资源的浪费,要用栈的时候但是有堆的一些操作栈是不需要的,那么就会执行一些不必要的操作以及用到一些不必要的资源,造成程序运行的速度和性能下降问题。2.栈上分配和释放内存由编译器自动管理,通过函数调用和返回来进行内存分配和释放。2.堆上的内存分配不连续且需要进行内存管理器的复杂操作。3.内存分配连续、简单,不涉及复杂的内存管理。
2024-06-09 15:38:15
136
原创 为什么C++可以重载函数?
c++可以进行重载函数是因为名字粉碎不同以及外部关键字问题。根据C和C++中对函数调用的修饰来看,C的修饰只最多知道参数的字节数,但是不知道参数和返回值类型,但C++修饰符可以知道返回值类型和参数类型,进而判断函数是否存在二义性,是否可以重载?例:int __stdcall my_add_int(int a,int b){}
2024-06-09 15:20:53
166
原创 new、malloc区别?
5.malloc申请内存失败返回NULL,使用时必须判空;new申请内存空间时抛出异常,要有捕获异常处理。2.malloc申请内存空间时,需要手动计算所需大小;new只需要类型名,自动计算大小。1.new/delete是c++中的运算符,malloc/free是函数api;4.malloc的返回值为void*,接收时必须强转;6.new还有三种使用方法:运算符使用、函数使用、定位使用;3.malloc申请的内存空间不被初始化;
2024-06-09 15:17:43
154
原创 C++中const使用场景
1.常量声明:const int x=100;2.修饰指针:指针常量、常量指针。3.修饰引用:不可以通过别名改值。4.函数中防止形参修改实参的值。
2024-06-09 15:10:18
220
原创 简述__stdcall和__cdecl的区别?
2.__stdcall调用必须知道参数的个数,而__cdecl调用不需要知道参数的个数,由修饰名可以看出。3.__stdcall是被调用者负责清除栈中的参数,__cdcl是调用者负责清除栈中的参数。
2024-06-09 14:51:53
93
原创 简述从汇编层去解释一下引用?
而引用作为变量的别名,且一经初始化就不可更改,那么就意味着引用的变量不允许改变,与常量指针int * const等价,只不过指针分配地址,但是引用不特地分配地址。->可以通过解引用修改a1的值,但是该指针只能指向a1的地址。->不可以通过解引用修改a1的值,但是可以修改a2。2.引用之所以与指针有区别,是由于编译器约束完成的,一旦编译成汇编语言就和指针一样。1.引用可以看作是编译器自动完成取地址、解引用的常量指针。从汇编层次来看,引用是通过指针实现的;
2024-06-09 13:55:41
133
原创 C++中引用和指针的区别?
6.对指针sizeof操作得到的是指针本身的大小,具体的由操作系统决定;对引用进行sizeof操作,计算的是指针类型的大小。10.除去特殊常性指针,指针初始化后可以被进行更改;4.指针可以为NULL;但是没有空引用,引用一开始就要进行初始化。8.指针++是对地址进行操作;引用++是给引用的值本身++;3.从使用上:使用指针需要进行解引用;5.在函数调用中传指针需要对指针进行判空,而引用不需要。但不存在多级引用(特殊情况:右值引用)1.从语法规则上:指针存储地址;2.从内存上:指针需要分配内存;
2024-06-09 13:38:55
130
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人