c/c++
c/c++学习笔记
会飞的胖达喵
胖达是只爱打架的猫,而且还会飞~
展开
-
c++ 多态的
【代码】c++ 多态的。原创 2023-09-22 15:44:15 · 494 阅读 · 0 评论 -
c++ 纯虚函数、抽象类
只要有一个纯虚函数,这个类称为抽象类抽象类的特点1、无法实例化2、抽象类的子类,必须要重写父类中的纯虚函数,否者也属于抽象类。原创 2023-09-21 18:08:01 · 289 阅读 · 0 评论 -
C++中operator关键字(重载操作符)
转载地址:operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名。这是C+ +扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算符的使用方法与其原来一致,另一方面扩展其功能只能通过函数的方式(c++中,“功能”都是由函数实现的)。原创 2023-09-19 15:45:08 · 1805 阅读 · 0 评论 -
c++ 友元
c++ 友元原创 2023-09-19 09:40:10 · 154 阅读 · 0 评论 -
c++ this指针与空指针调用类方法以及常函数
1、c++的成员变量与成员内函数是分开存储2、每一个非静态成员函数只会诞生一份函数实例,多个同类型的队形公用的是同一份成员函数的代码3、this指向调用这一份成员函数代码的对象实例4、this是一个隐藏的指向对象实例的一个指针,无需定义直接使用即可。原创 2023-09-18 11:20:06 · 208 阅读 · 0 评论 -
c++ 类的实例化顺序
释放先执行本对象的析构函数再执行包含的类对象的析构函数。其他类对象有作为本类成员,先构造类中的其他类对象,原创 2023-09-13 11:53:01 · 140 阅读 · 0 评论 -
c++ 初始化列表
初始化列表给对象赋值。原创 2023-09-13 09:33:40 · 112 阅读 · 0 评论 -
c++深拷贝、浅拷贝
深拷贝:在堆区重新申请的空间,进行拷贝操作。浅拷贝:简单的赋值拷贝包含指针拷贝。这里调用了三次析构函数。原创 2023-09-12 10:09:36 · 152 阅读 · 0 评论 -
c++ 构造函数、拷贝构造函数、析构函数
【代码】c++ 构造函数、拷贝构造函数、析构函数。原创 2023-09-11 08:54:18 · 93 阅读 · 0 评论 -
VS中的路径宏:OutDir、ProjectDir、SolutionDir等各种路径的说明
【代码】VS中的路径宏:OutDir、ProjectDir、SolutionDir等各种路径的说明。转载 2023-09-09 09:39:55 · 730 阅读 · 0 评论 -
c++位运算
补码方法一:方法二。原创 2023-08-30 15:07:44 · 84 阅读 · 0 评论 -
__stdcall 和 __cdecl 的区别浅析
_cdecl 是C Declaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,由调用者负责把参数压入栈,最后也是由调用者负责清除栈的内容,一般来说,这是 C/C++ 的默认调用函数的规则,MS VC 编译器采用的规则则是这种规则2. __stdcall。__cdecl 规则要求调用者本身负责栈的恢复工作,在汇编的角度上说,恢复堆栈的位置是在调用函数内,考虑这样一段 C++ 代码(在 VC 下 Debug)转载 2023-08-21 16:09:54 · 668 阅读 · 0 评论 -
c语言操作文件
从用户或者操作系统使用的角度(逻辑上)文件可以分为文本文件、二进制文件文本文件:存储时,是将字符的ascii码值存在磁盘中,取的时候将ascii码翻译成对应的字符,这个翻译器就是文本编辑器二进制文件:存储的是二进制,取的时候也是二进制。原创 2023-08-16 15:51:51 · 292 阅读 · 0 评论 -
自动变量(auto)外部变量(extern)静态变量(static)寄存器变量(register)
在计算机运算中为了提高效率,允许将变量的值放在CPU中的寄存器中,这种变量叫“寄存器变量”,用关键字register来声明。全局变量是具有外部链接属性的,static修饰全局变量后,将外部链接属性变成了内部链接属性,此时的全局变量只能在自己所在的.c文件中使用,其他文件中无法链接使用,这样给我们的感觉是影响了变量的作用域。static修饰局部变量,是改变了变量的存储类型本来局部变量是放在栈区的,被static修饰后存放内存的静态区了,因为存储类型的改变,从而导致生命周期变长。转载 2023-08-11 15:46:34 · 758 阅读 · 0 评论 -
c语言内存管理
a、作用域:在定义变量的{}之内有效b、声明周期:程序运行至变量定义处开辟内存空间,所在函数运行结束之后释放空间c、未初始化的变量值:随机。原创 2023-08-11 11:57:50 · 486 阅读 · 1 评论 -
linux中C语言多进程,同时写数据到同一文件冲突的原因-bin文件打开
但是,这时由于系统调度,子进程在父进程 lseek 之后,写入数据之前这个空档,也执行了 lseek 函数,并且把数据写入文件了。这样一来,如果进程 A 先从偏移量为 10 处写入 file 20 个字节,接着进程 B 也从偏移量为 10 处写入 file 30 个字节,那么进程 A 的写入的数据就被覆盖了。程序的逻辑非常简单,就是父子进程都打开 test.bin 文件,子进程往其中写入 20 个字节的 0x01,父进程往其中写入 30 个字节的 0x02。现在再编译执行,发现写入的数据终于正常了。转载 2023-08-11 08:44:13 · 1305 阅读 · 1 评论 -
严重性 代码 说明 项目 文件 行 禁止显示状态错误 C4996 ‘strcpy‘: This function or variable may be unsafe. Consider using
项目--->右击属性--->设置为否 即可。原创 2023-08-09 18:10:23 · 2016 阅读 · 0 评论 -
C4996:‘strcpy‘: This function or variable may be unsafe. Consider using strcpy_s instead.
在把字符串str2复制到str1中后,字符串的长度已经超过了字符串数组的长度了,这是危险的,但我们发现这时字符串的长度以改变,但字符串数组的大小并没有改变。这个错误就是字符组数组越界了,这是因为strcpy_s函数检测了str1的长度是否大于str2的长度,发现并不满足str1的长度大于str2的长度,所以提示错误,然而strcpy函数却没有这种检测,所以得出了正确结果,但这是极其危险的,因为这种方式修改了没有在定义中的内存,会恶意改写没有经过系统分配的内存。2)str2的长度不能超过str1定义的长度。转载 2023-08-09 17:56:47 · 1003 阅读 · 0 评论 -
c语言函数作为形参的注意事项
【代码】c语言函数作为形参的注意事项。原创 2023-08-07 15:41:11 · 678 阅读 · 0 评论 -
c语言指针的运算
【代码】c语言指针的运算。原创 2023-08-04 18:02:57 · 184 阅读 · 0 评论 -
C语言指针操作数组赋值
1、通过指针修改数组元素的值。原创 2023-08-04 15:53:10 · 1596 阅读 · 0 评论 -
C语言多级指针
【代码】C语言多级指针。原创 2023-08-03 17:57:30 · 290 阅读 · 0 评论 -
c语言野指针int*p、空指针int*p = NULL、万能指针void* p
1、野指针,既没有初始化的指针,//如果没有给指针初始化,则指针p的内容为随机地址,会随机指向,故成为野指针。原创 2023-08-02 16:57:31 · 894 阅读 · 0 评论 -
C语言中char、short、int、long各占多少字节
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137481.html原文链接:https://javaforall.cn。”的朋友提醒,他在ubuntu 18.04,64位 环境下测试,long占据8个字节。原创 2023-08-02 09:02:03 · 8782 阅读 · 0 评论 -
include 尖括号与双引号的区别
有利于多个文件同事引入xxx.h的不会报错,此时定义再xxx.c文件,可以保证定义只有一份减少冲突。3、文件分离的意义 xxx.c,xxxx.h。尖括号会优先在系统默认的类库目录去找头文件。双引号,编译器会优先在用户目录寻找头文件。原创 2023-07-26 10:56:48 · 391 阅读 · 0 评论 -
c语言为什么不支持函数重载
在我们C++中,允许我们在同一作用域中声明同名的函数,这些同名的函数的形参列表不同就是我们的函数重载。形参列表(形参变量个数不同,形参变量类型不同,形参变量顺序不同)在这里我们要注意一点,函数的返回值不同不构成函数重载整数相加函数浮点数相加函数形如上面两种写法的函数就是函数的重载,第一个函数是用来计算两个整数相加的,第二个函数是用来计算浮点数相加的,两个函数的形参类型不同,所以这就构成了add函数的重载。转载 2023-07-22 22:48:13 · 86 阅读 · 0 评论 -
__declspec(dllexport)和__declspec(dllimport)
_declspec(dllexport)声明一个导出函数,是说这个函数要从本DLL导出。当然,如果你的DLL里全是C++的类的话,你无法在DEF里指定导出的函数,只能用__declspec(dllexport)导出类。考虑下面的需求,使用一个方法,一个是提供者,一个是使用者,二者之间的接口是头文件。头文件中声明了方法,在提供者那里方法应该被声明为__declspec(dllexport),在使用者那里,方法应该被声明为__declspec(dllimport)。二者使用同一个头文件,作为接口,怎么办呢?转载 2023-07-22 21:50:30 · 163 阅读 · 0 评论 -
fork函数的理解
在此代码中定义了一个全局变量g_val,全局变量是存在静态区的,生命周期是整个程序的生命周期,对其进行修改其值是会变为修改后的值的,父进程sleep了3秒钟,保证了子进程先跑完,然后再去执行父进程的,既然在子进程中已经将g_val的值修改为100,那么在父进程中的g_val是否也会是100呢?进程调用fork函数时会以该进程为父进程创建出子进程,父子进程代码共享,但进程具有独立性,父子进程也不例外,这里的共享只是指的是子进程采用写时拷贝去拷贝父进程的数据,父子进程的数据是两块不同的空间。转载 2023-06-06 09:23:06 · 106 阅读 · 0 评论 -
E1696 无法打开 源 文件 “string.h“
公司是win10没有问题,在家里面是win11,项目拉下来显示。更新之后重新打开vs即可。原创 2022-08-22 23:07:23 · 4252 阅读 · 0 评论 -
使用inet_ntoa会报错
在Socket编程中,使用inet_ntoa会报错,如图 目前解决方法有以下几种,1、用inet_ntop函数替代inet_ntoa2、项目属性---配置---C/C++---预处理器----预处理器 ---加上“_WINSOCK_DEPRECATED_NO_WARNI”3、项目属性---配置---C/C++---预处理器----预处理器 ---加上“_CRT_SECURE_NO_WARNINGS”4、项目属性---配置---C/C++---常规---将SDL检查改为否这几种方法我都试过,没能解决我的问题。转载 2022-07-07 11:48:40 · 1150 阅读 · 0 评论 -
error LNK2019: 无法解析的外部符号
编译错误信息尝试在.h文件中添加解决方法原创 2022-07-06 15:50:22 · 1353 阅读 · 1 评论 -
socket编程demo二
socket编程示例原创 2022-07-04 17:18:49 · 216 阅读 · 0 评论 -
双冒号作用运算符以及命名空间详解
转载地址:双冒号作用运算符以及命名空间详解,你确定不来看看吗?_敲键盘的喵的博客-CSDN博客一、双冒号作用域运算符通常情况下,如果程序中即存在局部变量又存在全局变量,局部变量将会获得较高的优先权,它将屏蔽全局变量,但双冒号作用域运算符可以解决局部变量和全局变量重名的问题,代码如下:打印结果如下可以看到,当我们在变量前面加入::时,全局变量将会获得较高优先权。二、c++命名空间(namespace)1.用途在程序中,名称(符号常量、变量、函数、结构、枚举、类和对象等等)可能会相互冲突转载 2022-07-04 15:34:25 · 471 阅读 · 0 评论 -
c++实现tcpserver demo01
###c++实现tcpserver原创 2022-06-30 16:53:06 · 697 阅读 · 0 评论 -
宏,函数和内联函数
宏,函数和内联函数宏和函数的区别:1,宏作的是简单的字符串的替换(不包括数据类型)。函数的参数传递是有数据类型的。2,宏的参数替换是不经过计算直接处理的。函数调用是将实参的值传给形参(需要先经过计算)3,宏的替换是在编译之前执行的,即用宏体代替宏名,然后再进行编译。函数的调用是在编译以后。所以:宏占用的是编译的时间,函数占用的是执行的时间。4,宏的参数是不占用内存空间的(仅仅是字符串的替换)函数调用的参数传递则是具体变量之间的信息传递,形参作为局部变量肯定是要占用内存的。5,宏的替换是不需要时空开销的。转载 2022-06-28 10:42:03 · 280 阅读 · 0 评论 -
C/C++:函数名前引用一个空的宏定义
在很多函数定义的地方都带有空的宏定义比如:#define NS_CLASS //NS_CLASS的声明,仅仅只是一个定义为空的宏int NS_CLASS timer_init(struct timer *t, timeout_func_t f, void *data)查询了相关资料后,应该是多平台之间不同的编译器有不同的编译选项,只是为了以后其它平台有需要添加的或扩展的编译时选项而预留的。例如在VC环境下进行回调函数的声明时,很多时候都会加上_stdcall、_cdecl、 _fastcall这三个在w转载 2022-06-28 10:30:22 · 1286 阅读 · 0 评论 -
关于socket的一点理解
1、socket底层是tcp/ip协议,是可靠的通信,但是需要处理所谓粘包的问题,可以传递ascii字符串类型或者二进制流2、socket bind端口之后fork的子进程可以复用主进程的端口(主进程的资源fd等被复制了一份)可以解释有时候netstat -anp | grep 9001 一个端口,能看到下面一堆time_wait子进程(一般是240s,会被系统回收,这个可以修改)3、使用socket某些语言需要进行网络字节序(大端字节序)与本地计算机的字节序(大端可字节序/小端字节序)进行一个转换..原创 2022-06-17 09:24:02 · 186 阅读 · 0 评论 -
(C语言内存五)C语言内存对齐,提高寻址效率
计算机内存是以字节(Byte)为单位划分的,理论上CPU可以访问任意编号的字节,但实际情况并非如此。CPU 通过地址总线来访问内存,一次能处理几个字节的数据,就命令地址总线读取几个字节的数据。32 位的 CPU 一次可以处理4个字节的数据,那么每次就从内存读取4个字节的数据;少了浪费主频,多了没有用。64位的处理器也是这个道理,每次读取8个字节。以32位的CPU为例,实际寻址的步长为4个字节,也就是只对编号为 4 的倍数的内存寻址,例如 0、4、8、12、1000 等,而不会对编号为 1、3、11、1001转载 2022-06-15 15:01:47 · 588 阅读 · 0 评论 -
c/c++结构体指针转换
c/c++结构体指针转换原创 2022-06-15 12:03:56 · 1032 阅读 · 0 评论 -
理解字节序 大端字节序和小端字节序
以下内容参考了http://www.ruanyifeng.com/blog/2016/11/byte-order.htmlhttps://blog.csdn.net/yishengzhiai005/article/details/396725291.计算机硬件有两种储存数据的方式:大端字节序(big endian)和小端字节序(little endian)。举例来说,数值使用两个字节储存:高位字节是,低位字节是。正在上传…重新上传取消同理,的大端字节序和小端字节序的写法如下图。正在上传…重新上传取消2.我一转载 2022-06-14 15:59:35 · 197 阅读 · 0 评论