- 博客(22)
- 收藏
- 关注
原创 数组介绍与使用
二位数组定义:数组类型 数组名 [元素行个数][元素列个数];按元素类型分:字符型,短整形,整形,长整型,浮点型数组,指针数组,结构体数组......一维数组定义:数组类型 数组名 [元素个数];按维度分:一维数组,二维数组,三维数组.......:若干相同类型变量在内存中有序存储的集合。按行初始化(1)全部初始化(2)部分初始化。逐个初始化(1)全部初始化(2)部分初始化。初始化赋值不够后面补0。一维数组元素引用方法。二维数组元素引用方法。
2024-03-30 15:42:01
111
原创 Linux常用命令介绍
Linux常用命令摘要:Linux系统中,常用命令种类繁多,功能各异。例如,ls命令用于列出目录内容;cd命令用于切换当前工作目录;pwd显示当前工作目录路径;cp用于复制文件或目录;mv可移动或重命名文件/目录;rm则用于删除文件或目录。此外,cat查看文件内容,grep搜索文件内容,find查找文件或目录,tar打包文件,gzip压缩文件等命令也极为常用。这些命令的掌握对于Linux系统的日常操作和管理至关重要,是每位Linux用户应当熟练掌握的基本技能。
2024-03-30 14:28:41
1634
原创 结构体与链表介绍
结构体(struct)是C语言(以及许多其他编程语言)中的一种复合数据类型,用于将多个不同类型的数据组合成一个整体。通过结构体,我们可以创建具有多个数据成员的对象,这些成员可以是基本数据类型(如int、float、char等),也可以是其他结构体类型。struct 结构体名成员1的类型 变量名;成员2的类型 变量名;(2)例如:int age;在这个例子中,我们定义了一个名为Student 的结构体,它有三个成员:一个字符数组name用于存储学生的名字,一个整数age。
2024-03-28 14:07:11
245
原创 指针介绍与使用
类型名* 指针变量名;int *p;//定义指针p,指向整型变量char *cp;//定义字符变量cp,指向字符变量float *fp;//同理double *dp;指针赋值(1)先定义后赋值int a,*p;a=10;p=&a;定义好的指针p和变量a相同,存储在0x00000A34位置,存储的值为a的地址。*p可以对a内值进行操作。(2)定义与赋值一步完成int a=10;int *p=a;指针p赋值a的地址,*p为操作a的存储的空间。(3) p = &a;(4) q = p;
2024-03-27 16:04:56
514
1
原创 值传递;指针传递;应用传递
指针传递:指针传递也是值传递的一种,形参是指向实参地址的指针,当对形参进程操作时,也就相当于对实参自身进行操作。引用传递:引用传递,实际就是把引用对象地址放到开辟的栈空间,函数内部对形参的任何操作可以直接映射到外部实参。值传递:形参是实参的拷贝,函数内部对形参的操作并不会影响到外部实参。
2023-09-26 11:04:14
68
原创 多进程,多线程
(6).进程创建:pid_t fork(void),父进程大于零,子进程等于零,出错返回-1。进程创建还可以通过操作系统创建,从计算机启动到终端执行程序,0号进程---->1号内核进程----->1号用户进程(init进程)------>getty进程----->shell进程----->命令执行进程。(7).获取进程PID或父进程PID:pid_t get_pid(void)返回进程pid,pid_t get_ppid(void)返回父进程pid。(2).进程结构组成,代码段,数据段,堆栈段。
2023-09-21 09:46:55
70
原创 生产者消费者模型
在多线程开发中,如果生产者生产数据速度很快,而消费者消费数据速度很慢,那么生产者必须等待消费者消费数据后才能继续生产。为了达到生产者和消费者平衡,需要一个缓冲区来存储数据,就引入生产者消费者模型。栗子:你爸爸动作太快,做出来一锅又一锅包子,但是妈妈卖出去的速度又很慢,此时就需要你爸爸等会妈妈啦。举个栗子:早上包子店里有一个筐,框里放包子,爸爸负责做包子,妈妈负责卖包子。3.当缓冲区满的时候,生产者休息(处于休眠状态)等待消费者取出数据时,被唤醒,向缓冲区加数据。今天就写到这里,代码有不明白的可以评论哦!
2023-09-21 09:15:00
87
原创 虚函数使用需要注意的问题
对象的虚函数指针,指向其类的虚函数表。当我们通过基类指针调用虚函数时,编译器会根据虚函数指针找到相应的虚函数表,然后再根据虚函数在表中的索引找到并调用相应的虚函数。构造函数不能声名为虚函数,构造函数不用许使用虚函数,虚函数在运行时通过虚函数表来实现动态分配,构造函数,初始化类对象,她是在对象创建时自动调用,此时虚函数表还没有完全建立,因此无法实现动态分配。析构函数需要声名为虚函数,析构函数声名为虚函数,这样可以确保在删除基类指针指向派生类对象时,派生类析构函数能够被正确调用,避免内存泄露。
2023-09-20 15:05:52
109
1
原创 剑指offer 8,9,10
(11),有一个长度为 n 的非降序数组,比如[1,2,3,4,5],将它进行旋转,即把一个数组最开始的若干个元素搬到数组的末尾,变成一个旋转数组,比如变成了[3,4,5,1,2],或者[4,5,1,2,3]这样的。(10),大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。2.更加根节点进行中序遍历(左根右),可以使用递归方案,买也可以使用栈,队列都可以。使用栈实现队列,需要两个栈,一个用于压入,一个用于弹出。这题的解法,1.使用排序算法,第一个元素也就是所求元素。
2023-07-25 21:27:47
53
原创 剑指offer5,6
解决思路为,先创建一个字符串数组,接着对源字符串进行遍历,把遍历的结果存储到新建字符串中,如果遇到空格则替换成“%20”,最后返回新建字符串也就可以啦。第二种是利用栈的先进后出的特点,也是先对链表进行遍历,遍历的结果存储到栈中,之后对栈进行弹出操作,弹出的结果存储到一个新建的数组中,得到最后的结果。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。6. 输入一个链表的头节点,按链表从尾到头的顺序返回每个节点的值(用数组返回)。
2023-07-24 11:35:52
59
原创 剑指offer3,4
在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字是重复的。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组[2,3,1,0,2,5,3],那么对应的输出是2或者3。在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。本题使用哈希表进行解题,当然还有很多其他方案,比如sort()函数排序后在遍历。
2023-07-21 21:30:40
74
1
原创 剑指office第一天
2. 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。1. 请实现一个函数,把字符串。中的每个空格替换成"%20"。
2023-07-12 21:23:49
89
1
原创 C++内存分区
3.全局/静态存储区:存放全局变量和静态变量(static修饰),未进行初始化 则进行默认初始化0。4.堆区:使用new分配的内存,当然使用malloc申请内存也存储在该区域,需要和free成对出现。5.栈区:编译器自动分配的内存一般都使用该区域。2.常量存储区:存放常量,不允许更改。1.代码区:存放二进制代码。
2023-06-28 21:39:32
86
1
原创 网络编程中socket
4.listen(3) 监听电话,此时可以监听到三个电话,接到一个电话后,后面还能有两个电话给我打但是后面两个电话都要排队等着,等第一个电话挂掉。在来第四个的时候就会报错。5.accept() 阻塞等待直到有人连接此时返回连接者的IP和port。1.socket()创建一个套接字(在这里相当于创建一个电话)这个流程是在学习时,见到比较好理解的一种,比喻也很恰当。3.bind()(将电话卡插进手机中)2.把IP地址和端口号比喻成电话卡。
2023-06-28 15:29:50
90
1
原创 static/const的用法和作用
(1).static 类修饰的变量必须在类外进行初始化,static修饰的变量先于对象存在,所以static修饰的变量在类外进行初始化。(5).在类中的静态成员函数,属于整个类所拥有,这个函数不能接收this指针,因而只能访问类的静态成员变量。(1).函数体内static变量的作用范围时函数体内,变量只被声名一次,其值在下次调用时维持上次的值。(3).在模块内的静态函数,只可被模块内的其他函数访问,这个函数被限制在声名他的模块内。(4).在类中的静态成员变量,属于整个类所拥有,对类的所有对象只有一份拷贝。
2023-06-27 19:57:37
66
原创 使用三行代码实现pdf转化为word
先直接给出代码,这里需要确定两个变量,一个为pdf文件路径和转换后要保存的doc文件路径。对于多个pdf文件转化为docx也可以尝试使用for循环。这里转化的其实并不完美但是贵在好用和不需要钱。在使用前需要先导入所需要的包,
2023-06-27 14:53:08
171
原创 语义失真及语义通信系统难点总结
即使是面向任务的语义通信系统,对于语义信息熵的计算也是一件非常困难的事情。在这里互信息计算是一个难点,对于多维变量互信息计算是非常困难的,可以通过神经网络进行估计,比如比如变分法,MINE,和CLUB都可以对互信息进行估计。语义通信系统的性能很大程度上取决于通信双方共享相同的语义知识库。即使在较为完善的文字语义通信系统中,于没用对语义噪声进行合理的建模。4.当然还有一些其他的方法进行语义失真度量,比如把任务和图像重构相结合的方法,把图像的像素信息,特征信息和语义信息相结合的方法。3.通过语义信息熵,
2023-06-20 20:49:38
425
1
原创 Deep JSCC:Deep Joint Source-Channel Coding for Wireless Image Transmission
将这种深度JSCC方案的性能与传统的基于分离的数字传输方案进行了比较,后者采用了广泛使用的图像压缩算法,然后是容量捕获信道码。信源编码用于去除图像中的冗余信息(常用的图像信源编码为JPEG,JPEG2000,WebP等),接着对编码后的图像进行信道编码(霍夫曼编码,LDPC编码,Turbo编码等),信道编码后图像变为比特流,最后把比特流传进调制器,调制编码后传入物理信道。恢复后的图像与传输前的图像进行对比,通过均方误差,峰值信噪比,结构相似性等对图像进行评价。具体的参数由上图所示。
2023-06-07 21:40:26
2992
7
原创 C与C++中struct和class区别
(1)C中struct是自定义数据类型(UDT),C++中则是抽象数据类型(ADT),支持成员函数定义,同时支持继承和多态,class能够实现的struct都能完成。(2)C中没有权限设置,且struct只是一些变量集合,可以封装数据,且不可以隐藏数据。(2)继承关系中class默认是私有(private)继承,而struct则默认是共有(public)继承。(1)如果不对成员共有私有进行指定,struct则默认是共有,而class则默认是私有。(1)两者都有成员函数,成员变量,共有私有部分。
2023-05-17 21:36:20
334
原创 堆和栈的区别
有动态分配和静态分配,静态分配由编译器完成,动态分配则由alloca函数分配。栈由系统分配,速度快且不会由碎片。计算机在底层对栈提供支持分配专门的寄存器存放栈地址。堆由程序员分配,速度慢且会有碎片。堆由C++库函数提供,机制复杂,效率比栈低很多。堆是向高地址扩展,是不连续内存区域,大小可以灵活调整。栈的栈顶和栈底是之前预设好的,栈是向栈底扩展,大小固定。堆由程序员自己申请释放,堆的申请是动态的,没有静态分配的堆。
2023-05-17 11:41:45
78
1
原创 指针和引用的区别
7.当指针作为形参进行传递时,是将一个实参的一个拷贝传递给形参,两者指向的地址相同,但不是同一变量,在函数中改变这个变量的指向不影响实参。6.引用的本质是指针同样占据4字节内存,而指针是具体变量占据内存还需具体问题具体分析。1.指针是一个变量,存储一个地址,引用是所引用对象的别名,与所引用对象相同。5.sizeof指针得到指针大小,sizeof引用得到引用所指向变量大小。3.指针在初始化之后可以改变指向,而引用在初始化之后不可以再改变。2.指针可以为空,引用不能为空,且定义之后必须初始化。
2023-05-17 11:18:10
1331
1
原创 new/delete与malloc/free异同
new的实现过程:首先调用operator new 库函数分配足够大的内存,用以保存指类型对象;6.new是封装了malloc函数,delete则是封装了free函数。使用new申请的内存可以使用free释放,只释放内存,不析构对象。5.malloc/free是库函数,已经编译代码,需要库函数支持。而new/delete则不需要。3. new/delete返回具体类型指针而malloc/free则返回void类型指针。2.malloc使用时需要手动计算分配空间大小,new 使用时自动计算分配空间大小。
2023-05-15 20:34:34
390
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人