C/C++
文章平均质量分 53
qq_40170041
博客就是备忘录,这里主要记录一些学习的内容或者总结
展开
-
C语言中把数字转换为字符串
因为spritnf 是个变参函数,除了前面两个参数之外,后面的参数都不是类型安全的,函数更没有办法仅仅通过一个“%X”就能得知当初函数调用前参数压栈时被压进来的到底 是个4 字节的整数还是个2 字节的短整数,所以采取了统一4 字节的处理方式,导致参数压栈时做了符号扩展,扩展成了32 位的整数-1,打印时4 个位置不够了,就把32 位整数-1 的8 位16 进制都打印出来了。我们知道,在C/C++语言中,char 也是一种普通的scalable 类型,除了字长之外,它与short,原创 2024-07-11 16:31:22 · 851 阅读 · 0 评论 -
c语言中tm与time_t两种时间格式的转换
6、tm转化为time_t:采用mktime()函数进行转换。7、tm转为QDateTime。原创 2023-06-20 17:13:51 · 1486 阅读 · 0 评论 -
设置char类型的变量指定位为0或1
char类型的变量在内存中占用一个字节,即8位,想要单独设置某一位位0或者1,就只需要对这一位通过与或者或者或的运算进行设置。对于一个char型的变量 每一位为1 对应的分别为 2、4、8、16、32、64、128、256。(1原创 2023-06-20 10:39:23 · 272 阅读 · 0 评论 -
linux下socket编程处理TCP粘包
关于数据包的包头大小可以根据自己的实际需求进行设定,这里没有啥特殊需求,因此规定包头的固定大小为4个字节,用于存储当前数据块的总字节数。这样,在进行套接字通信的时候通过调用封装的 sendMsg() 和 recvMsg() 就可以发送和接收带数据头的数据包了,而且完美地解决了粘包的问题。1、首先接收 4 字节数据,并将其从网络字节序转换为主机字节序,这样就得到了即将要接收的数据的总长度。3、将待发送的数据拷贝到包头后边的地址空间中,将完整的数据包发送出去(字符串没有字节序问题)5、释放存储数据的堆内存。转载 2023-04-18 17:46:55 · 182 阅读 · 0 评论 -
16进制的数向右移动8位相当于除以2^8。
16进制的数向右移动8位相当于除以2^8。原创 2023-04-14 17:25:01 · 512 阅读 · 0 评论 -
C语言中从字符串获取文件名和文件路径
C语言中获取文件名这样获取到的是20221212172934U这样获取到的是A20221212172934U。原创 2022-12-12 17:56:50 · 1473 阅读 · 0 评论 -
指针理解:一级指针和二级指针,何时用指针,何时用二级指针
但是二级指针如何用,根据上面理解了函数传递的值是一种临时变量,所以想要改变外部的值,就需要用指针将外部变量的地址传递过来,如果想要改变外部指针变量的值,也就是改变外部指针变量指向的地址时,就需要用到二级指针。可以看到a的地址传递进了函数的形参中,此时的void* data传递过来的是地址,虽然也是临时变量,但是传递过来的外部变量的地址是固定的,所以这里*data = 5也就改变外部变量的值。这样就改变了指针指向的地址,也就是想要修改指针本身的值,也就是需要修改指向的地址,需要用到二级指针,多级指针同理。原创 2022-10-26 14:22:09 · 282 阅读 · 0 评论 -
互斥锁,同步锁,临界区,互斥量,信号量,自旋锁之间联系是什
https://www.zhihu.com/question/39850927/answer/2582691160转载 2022-08-26 17:21:43 · 69 阅读 · 0 评论 -
指针数组和数组指针
指针数组和数组指针。原创 2022-08-25 16:35:05 · 53 阅读 · 0 评论 -
C/C++如何避免“野指针”
C/C++如何避免“野指针”指针变量声明时没有被初始化解决办法:指针声明时初始化,可以是具体的地址值,也可让它指向NULL。指针p被free或者delete之后没有置为NULL解决办法:指针指向的内存空间被释放后指针应该指向NULL。指针操作超越了变量的作⽤范围解决办法:在变量的作⽤域结束前释放掉变量的地址空间并且让指针指向NULL。比如下面,在声明指针的时候一定要将指针指向nullptr,在delete释放完后也一定要在将指针指向nullptr,如果释放后原创 2022-08-25 15:01:38 · 471 阅读 · 0 评论 -
C++:STL
STL中最常用的容器为Vector,可以理解为数组,下面我们将学习如何向这个容器中插入数据、并遍历这个容器。序列式容器:强调值的排序,序列式容器中的每个元素均有固定的位置。STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器。提供一种方法,使之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等等。常用的容器中迭代器种类为双向迭代器,和随机访问迭代器。原创 2022-08-24 17:09:50 · 530 阅读 · 0 评论 -
C++基础二:模板
在上述代码中,如果T的数据类型传入的是像Person这样的自定义数据类型,也无法正常运行。建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。因此C++为了解决这种问题,提供模板的重载,可以为这些特定的类型提供具体化的模板。总结:建议使用显示指定类型的方式,调用函数模板,因为可以自己确定通用类型T。利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序。函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换。如果函数模板和普通函数都可以实现,优先调用普通函数。原创 2022-08-24 15:49:43 · 76 阅读 · 0 评论 -
C++基础一:内存分区和引用
作用:函数名可以相同,提高复用性函数重载满足条件:同一个作用域下函数名称相同函数参数类型不同 或者 个数不同 或者 顺序不同注意: 函数的返回值不可以作为函数重载的条件# include # include //解决cout中文输出乱码第一步 using namespace std;//函数重载需要函数都在同一个作用域下 void func() {cout原创 2022-08-24 14:37:58 · 81 阅读 · 0 评论 -
Qt下C++的cout输出中文信息乱码问题解决
加入头文件 == #include == //解决cout中文输出乱码第一步。//解决cout中文输出乱码第二步。在main函数中加入。原创 2022-08-23 18:30:56 · 4013 阅读 · 8 评论 -
三、C++笔记之面向对象特性---多态
在多态中,通常父类中虚函数的实现是毫无意义的,主要都是调用子类重写的内容。纯虚函数语法:virtual 返回值类型 函数名 (参数列表)= 0;静态多态: 函数重载 和 运算符重载属于静态多态,复用函数名。重写:函数返回值类型 函数名 参数列表 完全一致称为重写。静态多态的函数地址早绑定 - 编译阶段确定函数地址。动态多态的函数地址晚绑定 - 运行阶段确定函数地址。子类必须重写抽象类中的纯虚函数,否则也属于抽象类。动态多态: 派生类和虚函数实现运行时多态。子类重写父类中的虚函数。原创 2022-08-23 16:59:46 · 152 阅读 · 0 评论 -
二、C++笔记之面向对象特性---继承
继承是面向对象三大特性之一原创 2022-08-23 16:54:51 · 61 阅读 · 0 评论 -
extern设置变量为全局
在.h文件中加入extern进行定义,然后一定要在相应的.c/c++中进行声明例:在data_info.h文件定义extern QList <ST_CONTACTINFO_DB_DATA> GlobalContactInfo;然后data_info.cpp文件进行声明#include "data_info.h"QList <ST_CONTACTINFO_DB_DATA> GlobalContactInfo;这样就可以在其他文件中进行使用:1.包含头文件data_in原创 2021-09-18 16:00:30 · 300 阅读 · 0 评论 -
一、C++笔记之面向对象特性---封装
一、C++笔记之面向对象特性---封装原创 2022-08-05 14:41:04 · 187 阅读 · 0 评论