C语言教程
文章平均质量分 78
非子玉
InfoQ签约作者,阿里云专家博主,51CTO专家博主,华为云云享专家,嵌入式开发工程师,AE工程师。
座右铭:向着太阳,追逐梦想!
展开
-
配置C++的学习环境
如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。原创 2024-05-27 21:53:04 · 2663 阅读 · 2 评论 -
C++的基类和派生类构造函数
基类的成员函数可以被继承,可以通过派生类的对象访问,但这仅仅指的是普通的成员函数,类的构造函数不能被继承。构造函数不能被继承是有道理的,因为即使继承了,它的名字和派生类的名字也不一样,不能成为派生类的构造函数,当然更不能成为普通的成员函数。在设计派生类时,对继承过来的成员变量的初始化工作也要由派生类的构造函数完成,但是大部分基类都有 private 属性的成员变量,它们在派生类中无法访问,更不能使用派生类的构造函数来初始化。原创 2024-05-26 20:07:41 · 55 阅读 · 0 评论 -
C++中的const成员变量和成员函数
在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量和成员函数。原创 2023-08-26 20:35:23 · 420 阅读 · 0 评论 -
C++构造函数初始化列表
构造函数的一项重要功能是对成员变量进行初始化,为了达到这个目的,可以在构造函数的函数体中对成员变量一一赋值,还可以采用初始化列表。运行结果:小明的年龄是15,成绩是92.5李华的年龄是16,成绩是96如本例所示,定义构造函数时并没有在函数体中对成员变量一一赋值,其函数体为空(当然也可以有其他语句),而是在函数首部与函数体之间添加了一个冒号,后面紧跟语句,这个语句的意思相当于函数体内部的语句,也是赋值的意思。原创 2023-08-25 22:17:05 · 675 阅读 · 0 评论 -
C++函数重载
在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传入函数内部。但在中,这完全没有必要。C++ 允许多个函数拥有相同的名字,只要它们的参数列表不同就可以,这就是函数的重载(Function Overloading)。借助重载,一个函数名可以有多种用途。参数列表又叫参数签名,包括参数的类型、参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同。原创 2023-08-23 22:39:52 · 126 阅读 · 0 评论 -
QT设置widget背景图片
首先说方法,在给widget或者frame或者其他任何类型的控件添加背景图时,在样式表中加入如下代码,指定某个控件,设置其背景。drawPixmap在Widget的整个矩形区域绘制背景图片,第三个参数为要绘制的图片区域,传入空的矩形表示整个图片区域。特别提醒:类名 # 控件名,其中控件名要准确,假如你把widget的名字改成了其他,那么这里的控件名要一致。首先获得Widget的调色板,然后设置设置调色板背景(setBrush),最后将调色板设置到Widget中。1.使用调色板QPalette来设置图片。原创 2023-08-19 22:21:57 · 1337 阅读 · 0 评论 -
C++中String的语法及常用接口用法
在C语言中,string是一个标准库类(class),用于处理字符串,它提供了一种更高级、更便捷的字符串操作方式,string 类提供了一系列成员函数和重载运算符,以便于对字符串进行操作和处理。在学习 string 前,我们不妨先来了解一下 string 类到底是什么,有什么用呢?我们先来了解一下基本的概念吧C++标准库都是英语解释。我们也应该试着去适应,不懂的可以查阅。当然,在这里我就直接给出翻译,主要是以下内容:字符串是表示字符序列的类;最为常用的无非就是我们用串string来构造一个对象,也就是存储一原创 2023-08-18 22:20:54 · 278 阅读 · 0 评论 -
C语言如何实现DES加密与解密
常见的填充方式PKCS5Padding,PKCS5Padding表示当数据位数不足的时候要采用的数据补齐方式,也可以叫做数据填充方式。: 为8个字节共64位,Des算法规定,其中第8、16、24、......64位是奇偶校验位,不参与Des运算,所以常说Des的密钥为56位。ECB模式指的是电子密码本模式,是一种最古老,最简单的模式,将加密的数据分成若干组,每组的大小跟加密密钥长度相同;在工作中遇到的Des解密问题,第三方发来的数据需要我们进行des解密,但是解密的结果前几位始终是乱码。原创 2023-08-16 21:56:15 · 1944 阅读 · 2 评论 -
C语言实现哈希搜索算法
线性探测法(Linear Probing):使用一个数组存储整个哈希表,在发生哈希碰撞时,从当前位置开始向后依次查找第一个空闲的位置,并将元素插入到该位置中,当需要查找某个元素时,首先计算出该元素的哈希值,并定位到对应的位置,如果该位置为空,则说明目标元素不存在于哈希表中;否则,如果该位置存储的元素与目标元素相同,则直接返回;需要注意的是,哈希表的实现涉及到很多细节问题,比如哈希函数、冲突解决方法等,如果没有特殊需求,可以使用已经实现好的哈希表库,例如C++ STL库中的 unordered_map 类。原创 2023-08-16 21:55:38 · 1149 阅读 · 0 评论 -
Qt开发实现字幕滚动效果
这里也可以调用update()代替scrol(),但使用scroll()会更有效率,因为它只是简单地移动屏幕上已经存在的像素并且只对这个窗口部件的新显示区域(此时,只是一个1像素乘以宽度的像素条)产生一个绘制事件。我们也可以在Ticker的构造函数中完成startTimer()的调用,但是只有在窗口部件实际可见的时候,才有必要保存由Qt产生的定时器事件的那些资源。然后,它使用QWidget::scroll()把窗口部件的内容向左滚动一个像素。定时器的ID通常是非零的,所以可以使用0来表示定时器还没有启动。原创 2023-08-16 21:55:05 · 611 阅读 · 0 评论 -
c++实现哈希桶
那么这就是哈希桶的插入规则,找到对应位置的链表将数据插入到头部即可,如果要查找的话也是相同的原理先找到数据对应的链表然后循环遍历这个链表找到出现的数据即可,删除也是相同的道理,先找到数据对应的下标然后根据下标找到对应的链表,最后遍历链表找到要删除的数据进行链表的删除即可,那么这就是哈希桶的实现思路接下来我们就来看看这种方法的准备工作。根据前面的学习我们知道要想计算数据对应在哈希表上的位置就得添加对应的仿函数,那么这里的代码就如下。看到这里我们的准备工作就完成了接下来就要实现哈希的每个函数。原创 2023-08-16 21:54:23 · 106 阅读 · 0 评论 -
SQLite数据库实现数据增删改查
当前文章介绍的设计的主要功能是利用 SQLite 数据库实现宠物投喂器上传数据的存储,并且支持数据的增删改查操作。其中,宠物投喂器上传的数据包括投喂间隔时间、水温、剩余重量等参数。创建 SQLite 数据库表,用于存储宠物投喂器上传的数据。实现对数据库表中数据的插入操作,即将从宠物投喂器接收到的数据存储到数据库中。实现对数据库表中数据的查询操作,包括按照投喂间隔时间、水温、剩余重量等参数进行筛选,以便用户能够查看特定范围内的数据信息。原创 2023-08-16 21:46:45 · 1710 阅读 · 1 评论 -
QT使用QML实现地图绘制虚线
鼠标在地图上点击后,在点击位置添加图标 ,当有多个图标被添加到地图上后,计算各个图标间的距离,并创建一个新的虚线线段组件,连接两个图标点,显示距离数值。beginCoordinate:线段起始经纬度坐标。endCoordinate:线段终点经纬度坐标。textColor:显示距离文字颜色。textPixelSize:字体大小。lineColor:虚线颜色。lineWidth:虚线粗细。lineDash:虚线样式。原创 2023-08-15 22:07:31 · 858 阅读 · 0 评论 -
C++11时间日期库chrono的使用
chrono是C++11中新加入的时间日期操作库,可以方便地进行时间日期操作,主要包含了:duration, time_point, clock。原创 2023-08-14 22:07:30 · 511 阅读 · 0 评论 -
C++使用new来初始化指向类的指针
这个指针就指向这个变量的内存地址(相同的数据类型),完成初始化。原创 2023-08-13 22:44:04 · 1743 阅读 · 0 评论 -
C++语法中bitset位图介绍及模拟实现
对于上图来说,有一个整形数组,我们可以使用直接定址法对数组的数据进行映射,但是与之前不同的是,此时只是使用一个比特位来代表一个整形数据,当这个数存在时,比特位置1,不存在时,比特位置0,此时就可以大大节省空间资源,无符号整数只有2的32次方个,所以最多开2的32次方个空间,一个空间为一个比特,所以最终只需要512MB的空间。由于不能按位开空间,所以我们选择每次开一个字节的空间,由于有范围最大为N,一位关联一个数据,所以需要开N/8个字节的空间,但是有时可能不能整除,所以要开N/8+1个字节的空间。原创 2023-08-12 23:27:28 · 347 阅读 · 0 评论 -
C++实现一键关闭桌面
本程序使用C语言编写,调用的Windows API,所以只能在windows上运行。本程序无界面,启动后直接隐藏/显示桌面图标,运行结束后自动退出。开发工具:Visual Studio 2019。操作系统:windows 10。新程序新增了隐藏任务栏的功能。原创 2023-08-11 23:00:28 · 426 阅读 · 0 评论 -
C++友元函数和友元类的使用
在C++中,友元(friend)是一种机制,允许某个类或函数访问其他类的私有成员。通过友元,可以授予其他类或函数对该类的私有成员的访问权限。友元关系在一些特定的情况下很有用,例如在类之间共享数据或实现特定的功能。友元可以分为两种类型:类友元和函数友元。友元的使用场景包括但不限于以下情况:当两个或多个类需要共享私有数据时,可以使用类友元来实现数据的直接访问,而无需通过公有接口。当某个类需要提供特定函数或操作给其他类使用,但这些函数需要访问类的私有成员时,可以使用函数友元。原创 2023-08-10 22:39:06 · 430 阅读 · 0 评论 -
C语言驱动开发之内核解锁与强删文件
Windows中系统中断请求(IRQ)可分为两种,一种外部中断(硬件中断),一种是软件中断(INT3),微软将中断的概念进行了扩展,提出了中断请求级别(IRQL)的概念,其中就规定了32个中断请求级别。其中27-31为硬中断,顺序由小到大分别是:PROFILE_LEVEL,CLOCK1_LEVEL,CLOCK2_LEVEL,IPI_LEVEL,POWER_LEVEL,HIGH_LEVEL。,该函数例程用于创建一个句柄,该句柄是指定源句柄的副本,此函数的具体声明部分如下;原创 2023-08-09 22:19:46 · 296 阅读 · 0 评论 -
C语言编程—预处理器
ANSI C 定义了许多宏。在编程中您可以使用这些宏,但是不能直接修改这些预定义的宏。main()当上面的代码(在文件test.cLine :8ANSI :1。原创 2023-06-30 22:10:24 · 278 阅读 · 0 评论 -
C语言编程—强制类型转换
强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。您可以使用这里要注意的是强制类型转换运算符的优先级大于除法,因此的值首先被转换为型,然后除以 count,得到一个类型为 double 的值。类型转换可以是隐式的,由编译器自动执行,也可以是显式的,通过使用来指定。在编程时,有需要类型转换的时候都用上强制类型转换运算符,是一种良好的编程习惯。原创 2023-06-30 22:09:41 · 582 阅读 · 0 评论 -
C语言编程—错误处理
C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。在发生错误时,大多数的 C 或 UNIX 函数调用返回 1 或 NULL,同时会设置一个错误代码,该错误代码是全局变量,表示在函数调用期间发生了错误。您可以在 errno.h 头文件中找到各种各样的错误代码。所以,C 程序员可以通过检查返回值,然后根据返回值决定采取哪种适当的动作。开发人员应该在程序初始化时,把 errno 设置为 0,这是一种良好的编程习惯。0 值表示程序中没有错误。原创 2023-06-30 22:11:25 · 329 阅读 · 0 评论 -
C语言编程—递归
不在栈中的,应该就在堆中。原创 2023-06-30 22:08:39 · 732 阅读 · 0 评论 -
C++中的exec()函数
fork函数之后,如果想要把子进程换成一个我想要执行的进程,这时,就不得不使用exec()函数了,这也是fork()的意义所在。当然,exec系列的函数也可以将当前进程替换掉,不一定非要fork()一个子进程。常见的fork()调用例子有很多,比如从wechat发起一个语音电话、从bash或者zsh执行一个a.out程序,都是在利用exec系统调用将新产生的子进程完全替换成目标进程。int a = 0;a++;return 0;topps 54861很明显,它是zshkill 57892。原创 2023-06-30 22:09:34 · 2396 阅读 · 0 评论 -
C语言编程—内存管理
C语言中的动态内存管理。C语言为内存的分配和管理提供了几个函数。这些函数可以在头文件中找到。在C语言中,内存是通过指针变量来管理的。指针是一个变量,它存储了一个内存地址,这个内存地址可以指向任何数据类型的变量,包括整数、浮点数、字符和数组等。C语言提供了一些函数和运算符,使得程序员可以对内存进行操作,包括分配、释放、移动和复制等。void * 类型表示未确定类型的指针。C、C++ 规定 void * 类型可以通过类型转换强制转换为任何其它类型的指针。原创 2023-06-29 21:42:51 · 714 阅读 · 0 评论 -
C语言编程语法—语法风格
第一种代表拥有未知个参数,第二种代表没有参数,第三种代表有一个参数,第四种代表拥有未知个参数,并且第一个参数类型为int,未知参数在C语言中有一个解决方案就是,可变长的参数列表,具体参考C标准库,在此我们解释的依据就是,我们要将一切都掌控在自己的手中,我们不在括号内填写参数,代表着我们认为一开始的意思是它为空,正因此我们就应该明确说明它为void,而不该让它成为一个未知参数长度的函数,如此在你不小心传入参数的时候,编译器也无法发现错误。所以函数该有的它都应该有,那么函数还有什么呢?原创 2023-06-29 21:40:07 · 278 阅读 · 0 评论 -
C语言编程语法—结构
因此,在 C 中,Manpower 和 manpower 是两个不同的标识符。空格分隔语句的各个部分,让编译器能识别语句中的某个元素(比如 int)在哪里结束,下一个元素在哪里开始。fruit 和 =,或者 = 和 apples 之间的空格字符不是必需的,但是为了增强可读性,您可以根据需要适当增加一些空格。C 程序由各种令牌组成,令牌可以是关键字、标识符、常量、字符串值,或者是一个符号。在 C 程序中,分号是语句结束符。只包含空格的行,被称为空白行,可能带有注释,C 编译器会完全忽略它。原创 2023-06-29 21:39:34 · 169 阅读 · 0 评论 -
C语言字符串的常用操作
在 C语言中,字符串可以使用字符数组来定义和表示。上述语句定义了一个长度为 20 的字符数组 str,用来存储字符串。上述语句定义了一个字符数组 str,并使用字符串字面量"hello world"来初始化该数组。在 C语言中,字符串字面量是由一系列字符组成的常量,以\0字符结尾。例如,字符串"hello world"由 11 个字符组成,其中包括 10 个可见字符和 1 个\0字符。原创 2023-06-24 21:06:32 · 4833 阅读 · 0 评论 -
C语言编程—强制类型转换
强制类型转换是把变量从一种类型转换为另一种数据类型。例如,如果您想存储一个 long 类型的值到一个简单的整型中,您需要把 long 类型强制转换为 int 类型。您可以使用这里要注意的是强制类型转换运算符的优先级大于除法,因此的值首先被转换为型,然后除以 count,得到一个类型为 double 的值。类型转换可以是隐式的,由编译器自动执行,也可以是显式的,通过使用来指定。在编程时,有需要类型转换的时候都用上强制类型转换运算符,是一种良好的编程习惯。原创 2023-06-19 21:18:48 · 486 阅读 · 0 评论 -
C语言编程语法—排序算法
插入排序在实现上,通常采用in-place排序(即只需用到 {\displaystyle O(1)} {\displaystyle O(1)}的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。在区间中随机挑选一个元素作基准,将小于基准的元素放在基准之前,大于基准的元素放在基准之后,再分别对小数区与大数区进行排序。希尔排序是非稳定排序算法。原创 2023-06-15 21:15:54 · 823 阅读 · 0 评论 -
C语言编程—常量
在 C 中,有两种简单的定义常量的方式:使用#define预处理器。使用const关键字。原创 2023-06-09 22:04:06 · 5130 阅读 · 0 评论