qq_43351159的博客

私信 关注
明天会比今天更好
码龄2年

本号从今天开始会对很多行业的知识点进行刨析,不管是IT行业,还有你们非常向往的小语种行业!欢迎大家热烈加入,踊跃参与!

  • 127,817
    被访问量
  • 184
    原创文章
  • 30,708
    作者排名
  • 43
    粉丝数量
  • 于 2018-10-07 加入CSDN
获得成就
  • 获得82次点赞
  • 内容获得23次评论
  • 获得293次收藏
荣誉勋章
兴趣领域
  • #后端
    #C/C++
  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

C语言实现常用数据结构:栈-顺序栈实现(第6篇)

栈栈是一种特殊的线性表,其特性是仅能在表尾进行插入或删除的操作,栈中元素的操作是按照后进先出的原则进行,因此栈又称为后进先出线性表(Last In First Out,LIFO数据结构)。栈顶:表尾端称为栈顶栈底:表头端称为栈底空栈:不含任何元素的空表称为空栈出栈:从栈中删除一个元素的操作称为出栈入栈:从栈中增加一个元素的操作称为入栈顺序栈实现栈有两种存储实现方法,一种是顺序存储实现,一种链式存储实现。考虑简单性和日常使用方便,这里使用顺序存储的方式实现,链式实现可以
原创
84阅读
0评论
0点赞
发布博客于 6 月前

C语言实现常用数据结构:静态链表-数组实现(第5篇)

静态链表使用数组实现,利用数组下标代替指针,从而实现数据结点之间的先后关系。实现要点:1.数组下标为0的位置为头结点,指向自身时表明链表为空。2.数组下标为1的位置为空间备用链表的头结点,保存未被使用的数组空间。3.数组下标代替指针来理解链表结构。备注:从逻辑结构来看,其实有两个链表存在的数组中,一个用于保存数据的链表,一个是未使用的空闲链表。另外链表其它实现参见:使用示例功能:输入数据个数和数据,逆序保存到顺序表,并逆序输出显示到屏幕。运行结果如下:请输入数据总个数:10请依次输入10
原创
145阅读
0评论
0点赞
发布博客于 6 月前

谁写的代码,恶心

***1、***下面一段代码将注释和代码混在了一起,不认真看还真不知道。高亮显示后:***2、***看到这种多层嵌套恶心到头大。3、据说某俄国特工经过九死一生偷到了NASA的太空火箭发射程序的源代码的最后一页,代码是:))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
原创
217阅读
0评论
2点赞
发布博客于 6 月前

新的程序开发模式出现,传统的嵌入式C语言程序员快要灭绝了?

在2000年前后,嵌入式软件工程师有着一套非常具体的技能,他们通常是电气工程师,不仅了解底层硬件的工作原理,还可以再底层编写汇编代码或者C语言代码,以使系统满足实时需求。嵌入式软件工程师不仅要了解诸如C语言的软件开发,还要了解硬件。位、字节、寄存器的世界,正是嵌入式软件工程师的领域。但是如今不再那么简单了。在早期,嵌入式开发人员通常使用 8 位或者16位的体系结构,这些结构比较简单,因此开发人员一般在几个月的开发周期内便能掌握这些结构。但是近些年来,许多嵌入式开发团队已经转向更加复杂的 32 位体系.
原创
59阅读
0评论
0点赞
发布博客于 6 月前

C语言实现常用数据结构:不带头结点的单链表(第4篇)

使用示例带头结点的单链表请参见:[C语言实现常用数据结构:带头结点的单链表(第3篇)https://blog.csdn.net/qq_43351159/article/details/107840078功能:输入数据个数和数据,逆序保存到顺序表,并逆序输出显示到屏幕。运行结果如下:请输入数据总个数:10请依次输入10个整数:0 1 2 3 4 5 6 7 8 9单链表输出结果:9 8 7 6 5 4 3 2 1 0单链表删除5位置数据后输出结果:9 8 7 6 4 3 2 1 0代码实现:
原创
77阅读
0评论
0点赞
发布博客于 6 月前

面试系列之C++的对象布局【建议收藏】

我们都知道C++多态是通过虚函数表来实现的,那具体是什么样的大家清楚吗?开篇依旧提出来几个问题:普通类对象是什么布局?带虚函数的类对象是什么布局?单继承下不含有覆盖函数的类对象是什么布局?单继承下含有覆盖函数的类对象是什么布局?多继承下不含有覆盖函数的类对象是什么布局?多继承下含有覆盖函数的类对象的是什么布局?多继承中不同的继承顺序产生的类对象布局相同吗?虚继承的类对象是什么布局?菱形继承下类对象是什么布局?为什么要引入虚继承?为什么虚函数表
原创
41阅读
0评论
0点赞
发布博客于 6 月前

你们要的各类编程语言书籍推荐

说明:1、每一个方向可能推荐不止一本,只选一本即可。2、有的书非常详细,底层的一些东西解释的很全面,这种时候没有必要去纠结里面的细节,可以先按照路线往后学,都弄懂了再回来研究这些细节。3、不管学什么,怎么学,一定记得多敲代码。4、初学时以顿开的视频为主,书作为参考,这样效果更佳哦。5、这里列举出来的只是常规的一些推荐,有的可能不是最新版,小伙伴们根据自己的需要来选择。6、有的数最新版推出的时间可能较短,所以评分不是很多,小伙伴注意选择最新版的购买。7、如果小伙伴有其他更好地入门书籍推荐,请.
原创
123阅读
0评论
0点赞
发布博客于 6 月前

计算机存储的大端法和小端法

01引言在计算机内存中,通常是以字节(Byte),也就是 8 个位(Bit)为基本存储单元(也有以 16 位为基本存储单元的)。对于跨越多个字节的数据类型(比如 int 长 4 个字节),如何在内存中对这些字节进行排序有两种常见的方法:大端法(Big-endian)和小端法(Little-endian)【注】首先不管是大端法还是小端法存储,计算机在内存中存放数据的顺序都是从低地址到高地址,所不同的是首先取低字节的数据存放在低地址还是取高字节数据存放在低地址。比如说:0x12345  &n
原创
97阅读
0评论
0点赞
发布博客于 6 月前

C++ 流插入和流提取运算符的重载

—***** 1******—*<< 运算符的重载C++ 在输出内容时,最常用的方式:std::cout << 1 <<"hello";提出问题:那这条语句为什么能成立呢?cout 是什么?为什么 << 运算符能用在 cout 上呢?原因:实际上,cout 是在 iostream 头文件中定义的 ostream 类的对象。
原创
168阅读
0评论
1点赞
发布博客于 6 月前

TIOBE 2020 年 8 月编程语言排行榜:C语言仍稳居榜首,值得关注的依然是 Go、R、Swift 等

TIOBE 已公布 2020 年 8 月的编程语言排行榜。在本期榜单中指数没有太大变化,编程语言R继续上升,依然成为2020年TIOBE的编程语言的明星语言。更值得关注的依然是Go、Swift和SQL在排行榜第10名的竞争。Swift排名落后了2个名次(#10到#12),取而代之的是SQL重新的回到了第十位。同样值得注意的是Groovy以牺牲Scratch的代价重新进入TIOBE指数前20,Hack以44的位置进入前50。编程语言前十排行榜前 10 名编程语言长期走势图:前 10 名编程语言长期走
原创
117阅读
0评论
0点赞
发布博客于 7 月前

C语言实现常用数据结构:带头结点的单链表(第3篇)

单链表单链表使用指针来保存线性表数据元素的关系。实现要点:1.使用指针来指向下一个数据元素。2.单链表分为带头结点的单链表、不带头结点的单链表。3.使用带头结点的单链表不需要对空表进行特殊处理,简化操作。优缺点和适用场景:适用于进行大量插入、删除操作的场景,不具备随机存取的特性,访问数据必须循环遍历。使用示例功能:输入数据个数和数据,逆序保存到顺序表,并逆序输出显示到屏幕。运行结果如下:请输入数据总个数:10请依次输入10个整数:0 1 2 3 4 5 6 7 8 9单链表输出结果
原创
255阅读
0评论
1点赞
发布博客于 7 月前

掌握10个关键点,让你在ARM下进行高效的C编程

通过一定的方法来编写C程序,可以帮助C编译器生成执行速度更快的ARM代码。下面就是一些与性能相关的关键点:1.对局部变量、函数参数和返回值要使用signed和unsigned int类型。这样可以避免类型转换,而且可高效地使用ARM的32位数据操作指令。2.最高效的循环体形式是减计数到零(counts down to zero)的do-while循环。3.展开重要的循环来减少循环的开销。4.不要依赖编译器来优化掉重复的存储器访问。指针别名会阻止编译器的这种优化。5.尽可能把函数参数的个数限制在4个
原创
58阅读
0评论
0点赞
发布博客于 7 月前

函数调用的三种约定,你都清楚吗

__cdecl、__stdcall、__fastcall是C/C++里中经常见到的三种函数调用方式。其中__cdecl是C/C++默认的调用方式,__stdcall是windows API函数的调用方式,只不过我们在头文件里查看这些API的声明的时候是用了WINAPI的宏进行代替了,而这个宏其实就是__stdcall了。三种调用方式的区别相信大家应该有些了解,这篇文章主要从实例和汇编的角度阐述这些区别的表现形态,使其对它们的区别认识从理论向实际过渡。我们知道,函数的调用过程是通过函数栈帧的不断变化实现的
原创
53阅读
0评论
0点赞
发布博客于 7 月前

C语言实现常用数据结构:顺序表(第2篇)

顺序表顺序表使用一组连续的物理内存存储地址按照次序存放线性表的元素。实现要点:1.顺序表的长度可变。2.利用C语言的动态内存分配函数,动态分配内存,增加顺序表长度。3.顺序表初始分配一定大小的存储空间,当空间不足时,再次申请一定增量的空间。优缺点:1.顺序表具备随机存取特性,直接根据内存位置访问数据。2.顺序表插入和删除操作,需要移动大量元素。因此:顺序表适用于很少进行插入、删除操作,经常进行大量查询修改操作的场景。使用示例功能:输入数据个数和数据,逆序保存到顺序表,并逆序输出显示到屏
原创
71阅读
0评论
0点赞
发布博客于 7 月前

C语言实现常用数据结构:简要一览(第1篇)

线性表最简单的一种数据结构,具有相同类型的数据元素组成的序列。顺序表、链表是其两种简单实现。备注:数组也可以算一种简单的线性表。链表可以分为:带头结点的简单链表不带头结点的简单链表静态链表循环链表双向链表栈限定增加和删除数据操作只能在线性表的末端进行,因此是一种受限的特殊线性表。实现方式有:顺序栈链栈栈典型的特点是:数据“后进先出”,栈可以用来实现递归。栈数据结构的主要操作是出栈、入栈。队列限定增加数据元素在线性
原创
144阅读
0评论
0点赞
发布博客于 7 月前

C语言实现常用数据结构:基本概念(第0篇)

写在前面:为什么学习C语言数据结构今天开始,我准备和一起分享学习C语言常用数据结构,这里不求事无巨细的掌握数据结构的方方面面,而是学习编程、考试等实际中常用的重要数据结构,这里以分享可以运行的代码为学习主要方式,因为可运行的代码有时候是最好的老师。数据结构和算法是十分重要的。C语言+数据结构+算法=C语言程序。考虑下编程的过程:对于一个真实的问题,编程解决步骤往往是:第一步分析问题,第二步找到数学方法“纸面上”解决它,也就是找到“算法”,第三步选择合适的数据结构存放数据,实现“算法”,第四步选择编程语言
原创
75阅读
0评论
0点赞
发布博客于 7 月前

C语言必学的12个排序算法:基数排序(第11篇)

基本思想基数排序(radix sort),同样时一种非比较的内部排序算法,主要基于多关键字排序的思想进行排序,它将单个关键字按照基数分成“多个关键字”进行排序。例如整数789是一个关键字,可以按照十进制位划分多关键字(十进制数字取值0-9,所以基数是10),从高到低分为三个关键字“7、8、9”,这样对每位关键字进行排序,即可得到排序。基数排序对关键字数据元素有要求,一般是等长的整数和字符串。基数排序是一种稳定的内部排序算法。时间复杂度是O(d*(n+radix),d是关键字位数,radix是基数。例如
原创
79阅读
0评论
0点赞
发布博客于 7 月前

C语言必学的12个排序算法:桶排序(第10篇)

基本思想桶排序(bucket sort),和计数排序(参见前一篇文章)有些类似,同样是线性排序算法,基本思想是将输入的待排序列n个整数数据元素,根据每个数据元素的取值范围[0,k],划分称为m个区间,每个区间称为桶,每个桶存放该区间的数据元素,由于每个桶内的数据元素个数不确定,可以使用链表表示,同时使用插入排序,让每个桶的链表有序。这样按照次序将所有桶的元素连起来就得到完整的有序列表。桶排序,和计数排序一样,对输入的数据元素有一定要求,需要根据数据元素特征容易划分桶,具体问题具体分析,以下均以常用的整数
原创
151阅读
1评论
0点赞
发布博客于 7 月前

C语言必学的12个排序算法:计数排序(第9篇)

####题外话计数排序时间性能比之前的排序算法高,在实际中应用较多,只需要O(n)时间即可完成排序。计数排序思想比较巧妙,建议大家对照课本多学习,本文主要给出能运行的实例程序。[C语言必学的12个排序算法:基础知识 (第0篇)]线性时间排序之前学习的快速排序、堆排序、归并排序都是一类基于比较的排序算法,需要通过比较关键字大小确定数据元素的位置。这类算法最优的时间复杂度只能到O(nlogn)。线性时间排序是一类非比较排序算法,时间复杂度O(n),不需要通过比较关键字大小即可完成排序。计数排序(coun
原创
58阅读
0评论
0点赞
发布博客于 7 月前

C语言必学的12个排序算法:归并排序(第8篇)

####题外话很多童鞋感受算法比较难度,的确,算法其实和C语言本身关系不大,算法是计算机科学家利用丰富的数学和算法设计知识研究出来,如今我们只需拿来主义,学习使用即可,当然这需要一定的努力过程。[C语言必学的12个排序算法:基础知识 (第0篇)]基本思想核心是归并思想,将两个或两个以上的有序数据记录序列合并成一个完整的有序数据记录序列,其时间复杂度O(n+m),其中m,n表示两个有序序列的长度。例如:对于A(1,3,5)和B(2,4,6)两个有序序列A和B归并成有序序列C。第1步:1和2比较,1被
原创
74阅读
0评论
0点赞
发布博客于 7 月前

C语言必学的12个排序算法:堆排序(第7篇)

#题外话堆排序比之前的简单选择、冒泡算法、快速排序算法复杂一些,因为用到了树形数据结构,但是本文使用了数组实现完全二叉树,因此也比较简单。C语言初学者,可以简单了解其思想,具体的知识掌握可以参照数据结构等专业课程学习。ps:昨天因为学习实在太晚,未及时更新,抱歉哈。学习C语言之余,觉得C语言编程,最重要的就是C语言语法+数据结构+算法,掌握这三方面基本上可以应付各种编程问题。为什么学习排序算法,可以参见前面文章~[C语言必学的12个排序算法:基础知识 (第0篇)]树形选择排序选择排序其实可以有简
原创
64阅读
0评论
0点赞
发布博客于 7 月前

C语言必学的12个排序算法:简单选择排序(第6篇)

基本思想简单选择排序(simple selection sort)是最简单的一种排序方式,其基本思想很简单,以从小到大排序为例,每趟排序在当前的待排数据记录序列中选择最小的元素放在前面,这样进行n-1趟排序以后,整个数据记录有序。简单选择排序是稳定的内部排序方法,时间复杂度是O(n^2)。同样举例来说:例如:给定10个整数:(4,3,1,2,6,5,0,9,8,7) 从小到大排序。第一趟子排序:针对整个数据记录(4,3,1,2,6,5,0,9,8,7)。选择最小的数据0,放入前面第一个数据4所在
原创
85阅读
0评论
0点赞
发布博客于 7 月前

C语言必学的12个排序算法:快速排序(第5篇)

基本思想快速排序(Quick Sort),本质上是对冒泡排序的改进,以从小到大排序为例,每趟排序将待排的数据记录分割成两个子数据记录,其中前一半的数据记录关键字比后一半的数据记录关键字小,这样递归分别对两个子数据记录继续分割排序,最终形成完整的有序数据记录。理解:冒泡排序相当于每次排序后,前面的数据记录关键子都比最后位置的数据记录关键字小,快速排序只要求每次排序后,以某个数据记录关键字为界,前面的一半比后面的一半小即可,这里的某个数据记录称为 枢轴或支点记录。快速排序时间复杂度是O(nlogn),在基
原创
62阅读
0评论
0点赞
发布博客于 7 月前

程序员的“三十而已”,你都30岁了,不会只有xxx吧?

一部《三十而已》火了太太们的包包鄙视链出圈了有人的地方就有江湖是的,程序员入圈是容易的不需要4万的LV,更不需要限量版的爱马仕只需要一件耐躁的格子衫然而,程序员的30岁,却说不出”而已”二字01入圈篇你都3 0岁了,不会连一件像样的衣服都没有吧?格子衫会不会穿?你都30岁了,不会还只会PHP吧?2 1天精通xxx, 会不会?你都30岁了,不会还只有一个机械键盘吧?复制粘贴不会,现在会了吧?编译老是出错?只要你足够大力,编译器就不敢警告你!02生存篇
原创
478阅读
0评论
3点赞
发布博客于 7 月前

C语言必学的12个排序算法:冒泡排序(第4篇)

基本思想冒泡排序(Bubble Sort),是一类“交换”类排序方法,类似水中冒泡,最大的数据会沉到水底,较小的数会浮上来。很简单,以从小到大排序为例,每一趟排序将“逆序”(前一个元素比后一个元素大)相邻两个数据元素交换,这样就会将最大的元素交换到“最后”的位置,冒泡排序每趟子排序过程都会将当前“最大”元素交换到最后位置,较小的元素会渐渐排到前面。冒泡排序时间复杂度是O(n^2),是稳定的排序,当初始序列为从小到大有序时,仅需要进行n-1次关键字比较,不需要移动任何记录,即可完成排序过程;当初始序列从大
原创
60阅读
0评论
0点赞
发布博客于 7 月前

C语言必学的12个排序算法:希尔排序(第3篇)

基本思想希尔排序(Shell’s Sort),以发明人命名,又称为缩小增量排序,也是一种插入排序算法。主要思想:直接插入排序算法时间和待排数据有关,其平均复杂度是O(n^2),但是在待排数据已经有序的情况下,其复杂度可以达到O(n),因为不需要移动数据。希尔排序就是利用这种特点,先将整个待排数据记录分割成若干个子待排数据记录,然后分别进行直接插入排序,当整个待排数据记录“基本有序”时,再对整个数据记录进行完整的一次直接插入排序。通俗地来说,先“跳着”给待排序列排序几个数据,让待排数据基本有序的情况,再
原创
98阅读
0评论
0点赞
发布博客于 7 月前

C语言必学的12个排序算法:折半插入排序(第2篇)

基本思想直接插入排序实现简单,但是对于待排数据量较大时,时间性能差,因此可以对其改进。改进排序算法性能,无外乎从减少“比较”和“移动”操作次数,折半插入排序是其中一种改进,插入排序需要在有序子表查找合适的位置,此时可以使用折半查找的方式实现,减少比较次数。折半查找,举例来说明:对于9个数据的有序数据表:(1,2,3,4,6,7,8,9,10),给定一个数据5,如何查找合适的位置插入,保持数据表有序。1.首先有序表长折半9/2=4,可以和第4个数据4比较,发现5大,因此5的位置肯定在有序表后一半(6
原创
96阅读
0评论
0点赞
发布博客于 7 月前

C语言必学的12个排序算法:直接插入排序(第1篇)

为什么学习排序算法排序和查找是计算机专业课程数据结构和算法中最重要的部分之一,也是编程中常用的基础知识。C语言初学者对直接插入、简单选择两种最简单的排序算法必须掌握,足以应付一般的考试、课程设计、小程序编写。但是对于计算机专业、编程开发的同学,必须熟练掌握这12个算法,达到手写算法的程序,排序算法在算法能力训练、考研笔试和机试、工作面试、真实软件项目中普遍使用。C语言必须的12个排序算法文章系列,每篇文章介绍一个算法,使用C语言实现一个排序算法,这些代码可以作为模板代码,大家可以收藏,方便编程使用。
原创
95阅读
0评论
0点赞
发布博客于 7 月前

C++中是如何调用C接口的?

前言如何在C++代码中调用写好的C接口?你可能会奇怪,C++不是兼容C吗?直接调用不就可以了?这里我们先按下不表,先看看C++如何调用C代码接口。C++如何调用C接口为什么会有这样的情况呢?想象一下,有些接口是用C实现的,并提供了库,那么C++中该如何使用呢?我们先不做任何区别对待,看看普通情况下会发生什么意想不到的事情。首先提供一个C接口://来源:公众号【C语言PLUS】//test.c#include"test.h"void testCfun(){ printf("I am
原创
101阅读
0评论
0点赞
发布博客于 7 月前

轻松学做C语言课程设计:学生成绩管理系统-链表实现

题外话C语言课程设计,对于初学者来说,主要是综合运用C语言基础知识,以实际项目的形式锻炼编程能力。从今天开始,一起轻松学做C语言课程设计常见项目,建议先运行代码,再一步步理解其实现。备注:1.不同C编译器,对C语言程序编译有差别,建议大家选择相同的编译器。2.代码手机不方便看,可以收藏使用电脑查看,注意各种标点符号。功能要求学生成绩管理系统常用功能一般包括:1.学生信息包括学号、姓名、4门课成绩(语文、数学、英语、专业课),成绩百分制整数;2.学生信息以文件形式保存;3.可以显示所有学生信
原创
628阅读
0评论
1点赞
发布博客于 7 月前

一篇文带你了解程序员的生存环境到底有多难!

世界上大部分软件公司都是面向业务开发模式而且长期不会变,也合理。因为存在这样的需求。业界不是学界,业界没有义务按照科研的机制来运作。业界的主要目的是满足企业个人的IT需求。科技企业最大的问题,是“面向业务的开发”很多企业业务最终面对的是个人用户,而且把精力和资源太多地放进了这些面向个人用户的业务中,即虚耗了企业运营的成本,也增加了企业潜在的风险。更健康的科技企业,应该是“面向解决问题的开发”,这里的问题,不仅仅是互联网的问题,不仅仅是民生问题,也包括了自然科学、共性基础科技难题、面向不同领域提供分析处
原创
82阅读
0评论
0点赞
发布博客于 7 月前

轻松学做C语言课程设计:图书管理系统-链表实现

题外话C语言课程设计,对于初学者来说,主要是综合运用C语言基础知识,以实际项目的形式锻炼编程能力。从今天开始,一起轻松学做C语言课程设计常见项目,建议先运行代码,再一步步理解其实现。题目要求图书管理系统提供图书信息管理以及借还管理。图书信息至少包括:图书编号、书名、价格、作者、借还状态,提供以下功能:1.增加图书信息,录入;2.查询已有的所有图书信息;3.删除图书;4.修改图书信息;5.借阅图书;6.归还图书;7.退出;实现要点该要求较为简单,可采
原创
268阅读
0评论
1点赞
发布博客于 7 月前

必须知道的C知识细节:常用的四种变量命名法

写C语言程序需要给函数、变量命名,也就是标识符,不同编程语言和不同程序,命名方式和规范各不相同,每种语言都有自己的习惯命名方法。截至目前,编程的命名方法主要有四种,这四种方法没有优劣之分,主要看个人爱好和编程规范要求,因此大家可以选择一种作为自己的风格。对于简单变量,可以使用单个字母或单个单词简写命名;对于复杂的变量和函数需要使用多个单词时,充分利用以下的命名法。变量命名其实对于计算机来说,可以是任意的,但是命名对于程序员来说,可以增加程序代码的可读性,因此十分重要。1.下划线命名法使用下划线分割多个
原创
128阅读
0评论
0点赞
发布博客于 7 月前

轻松学做C语言课程设计:图书管理系统-数组实现

C语言课程设计,对于初学者来说,主要是综合运用C语言基础知识,以实际项目的形式锻炼编程能力。从今天开始,一起轻松学做C语言课程设计常见项目,建议先运行代码,再一步步理解其实现。题目要求图书管理系统提供图书信息管理以及借还管理。图书信息至少包括:图书编号、书名、价格、作者、借还状态,提供以下功能:1.增加图书信息,录入;2.查询已有的所有图书信息;3.删除图书;4.修改图书信息;5.借阅图书;6.归还图书;7.退出;实现要点该要求较为简单,可采用结构数
原创
389阅读
0评论
0点赞
发布博客于 7 月前

必须知道的C语言知识细节:C程序编译后内存到底是如何布局

C语言程序编译以后,代码和数据都必须存放在内存中由CPU执行。理解C程序内存是如何划分布局,才能真正理解C语言中变量、存储类型、指针等底层知识点。一个C语言程序编译后,可执行文件中运行时内存空间按照以下规律进行连续划分布局。以下各区域内存地址按照从小地址到大地址空间排列。1.文本段也称为代码区,存放C程序编译的二进制指令代码,例如定义的各种函数体内的代码翻译成CPU指令后存放在该区域。2.数据段存放经过初始化的全局变量和静态变量的值。C语言中初始化的全局变量和静态变量内存分配在这个区段,初值也保存
原创
128阅读
0评论
0点赞
发布博客于 7 月前

必须知道的C语言知识细节:函数形参和实参的区别

当你选择了一种语言,意味着你还选择了一组技术、一个社区。——Joshua BlochC语言中函数形参和实参是十分重要的概念,初学者很容易混淆。形参:顾名思义,形式参数,仅仅是声明了参数的类型和参数名称,未实际分配内存和赋值。实参:实际参数,是指函数调用时,实际赋值和分配内存空间。例如:int sum(int a, int b){ return a+b;}int main(void){ int c=1; sum(c,2); return 0;}很明显,函
原创
122阅读
0评论
0点赞
发布博客于 7 月前

容易忽略的C语言知识细节:你知道scanf函数格式控制%[]是什么输入类型吗?

C语言其实功能很强大,有不少细节的功能很有用。今天分享下C语言输入函数scanf函数中 %[] 格式控制符号的作用。C语言输入和输出函数使用格式占位符%作为格式控制,所谓的占位符就是在输入输出的内容中预留位置填充等待输入输出的内容,出现格式占位符%的地方表明有输入和输出。常见的格式控制有:%d 整数%f 单精度浮点数%lf 双精度浮点数%c 字符%p 指针值%s 字符串%u 无符号整数%% 百分号当然除了以上常用的,还有今天介绍的 %[]。%[] 格式控制类型,本质上也
原创
70阅读
0评论
0点赞
发布博客于 7 月前

你见过“最美”的C语言代码是什么?

我们都知道雷军雷布斯说过当时他写的代码像诗一样优美,那已经是三十年前的汇编时代了,那么现在你有见到过最美的c语言代码吗?我在网上收集了一些代码,供大家赏诗,其中我本人最喜欢最后一个。这是我找到最多的答案,估计是程序员想自黑还是说这个带大家步入了代码的世界。#include<stdio.h> int main(void) {   printf("Hello,World");   return
原创
231阅读
0评论
0点赞
发布博客于 7 月前

必须知道的C语言知识细节:函数声明与定义的参数名称可以不一样吗?

函数声明和定义一般都有参数,C语言中函数声明关注的是函数返回值类型、函数名称、函数参数类型,其中函数参数名称并不关注,因此参数名称可以在声明时省略,在定义时取任意名称。注意:声明和定义是有区别的,具体可以参见前面文章。[必须知道的C语言知识细节:声明和定义]以下三种方式声明和定义函数都是正确的。第一种:常用的,声明和定义函数参数名称均一致。int add(int a, int b);   // 函数声明int add(int a, int b)    /
原创
798阅读
0评论
2点赞
发布博客于 7 月前

必须知道的C语言知识细节:三类函数使用区别

C语言函数有三类,分为外部函数、静态函数、内联函数,其中前两种是C89标准支持,第三种是C99标准增加的。外部函数这类函数是默认的函数类型,基本上平时我们使用的就是这种函数,声明有以下两种方式,例如:// 使用extern关键字,显示声明extern int add(int a, int b);// 或省略关键字extern,编译器也会自动认为是externint add(int a, int b);外部函数表明在当前声明和定义的代码文件中可以使用,也可以在其它代码文件中可以通过#includ
原创
74阅读
0评论
0点赞
发布博客于 7 月前

必须知道的C语言知识细节:函数参数传递方式只有值传递吗?

C语言函数是很重要的语法结构,函数将程序模块化,实现一个个独立的小功能。函数是由返回值类型、函数名、函数参数列表组成的,其中函数调用时,将实参传递给参数列表的形参,函数根据传递的实参值计算出结果返回,这里涉及传递函数参数的方式。形参 VS 实参形参(形式参数):很简单,函数声明和定义中的参数名称就是形参,例如:定义一个计算两个整数和的函数,其中参数名称a和b就是形参。int add(int a, int b){return a+b;}实参(实际参数):当需要实际调用时,传递给函数的具体参数值
原创
64阅读
0评论
0点赞
发布博客于 7 月前

必须知道的C语言知识细节:什么是变量的地址

计算机中内存是按照字节编址的,也就是每个字节都有唯一的地址,例如32位计算机,内存地址空间是2的32次方,也就是4G字节空间,地址编号从0开始,范围是0到2^32-1。C语言是接近硬件的高级语言,提供运算符(&和*)以及指针直接操作内存地址。地址本质上也是一个无符号整数,C语言使用运算符 & 直接获取变量地址,运算符*用来定义指针变量和间接获取地址存放的值。输出有两种方式:1.使用格式控制符号 %p 输出地址十六进制格式。2.使用%lu输出地址无符号十进制整数表示。例如:int
原创
229阅读
0评论
0点赞
发布博客于 7 月前

必须知道的C语言知识细节:=和==区别

今天有同学问我,C语言中的等号和数学中的等号区别。这个问题对初学者的确有一些迷惑,这里详细说明下。C语言中等号=表示赋值运算符,例如E1=E2,表示将E2的值存放到变量E1中,E1必须是可修改的左值,也就是变量。双等号是逻辑判断运算符,表示相等,例如E1E2,表示判断E1和E2的值是否相等,如果相等返回1,不相等返回0值。因此,双等号==才是数学中的等号,另外C语言中的不相等运算符号用 != 表示。注意两者不能混用,在if、while、for等语句中表示逻辑判断是,如果混用将导致程序运行结果不正确。
原创
127阅读
0评论
0点赞
发布博客于 7 月前

v必须知道的C语言知识细节:注释三种使用方式区别

注释的作用是给代码做说明,方便别人阅读和理解代码,写注释是很好的编程习惯。编译器会直接忽略代码中的注释,注释不对程序功能产生任何影响,即使不写注释,也不影响程序代码。三种注释写法:1.单行注释,/* */之间的所有内容会被作为注释。/* 这是注释 */2.多行注释,/* */之间的多行内容会被作为注释。/*这是注释1。这是注释2。*/3.C99新增的一种单行注释,该风格借鉴C++注释风格。//符号表示的注释告诉编译器忽略 // 和换行符间的所有内容,单行注释不能跨行。// 这是单行注
原创
54阅读
0评论
0点赞
发布博客于 7 月前

必须知道的C语言知识细节:单引号和双引号正确用法

C语言中ACSII码字符单引号’和双引号"在程序中经常出现,很简单,但却是十分重要的语法标点符号,初学者容易混淆使用。单引号在字符常量时使用,表示单个字符。例如:char c;c = ‘a’;c = ‘1’;c = ‘A’;当在单引号中出现两个及以上字符时或没有字符时,编译出错。例如:char c = ‘aA’;  // 编译出错,单引号只能是一个字符char c = ‘’;    // 单引号中间没有任何字符时,编译出错双引号在表示字符串常量时使用,可以
原创
515阅读
0评论
2点赞
发布博客于 7 月前

必须知道的C语言知识细节:sizeof是关键字还是运算符?

很明显,sizeof是C语言的语法关键字,不是运算符。运算符是有优先级和结合性的,具体可以参见前面全面介绍运算符的文章。[C语言表达式和运算符][C语言运算符表(完整)]关键字是C语言语法保留和内置支持的,不存在优先级和结合性的问题。sizeof是用来求指定类型或指定变量的占用内存的字节数,使用注意有两种情况:1.求类型的字节数时,后面必须有括号2.求指定变量的字节数时,括号可以省略,也可以加上括号备注:建议都加上括号,这样就不会出错。例如:int x;sizeof出现在
原创
108阅读
0评论
0点赞
发布博客于 7 月前

必须知道的C语言知识细节:break、continue语句区别

break语句、continue语句都是C语言标准规定的跳转类语句,能够实现程序无条件转向另一处执行。break和continue中在循环体中经常出现,因此必须掌握其区别,避免出错。先复习下两种语句的用法:break语句可以在开关体(switch语句)或循环体内(while,do…while,for)出现,总结起来用以下四种情况,实现跳出当前switch语句或循环体语句,跳转到开关体或循环体外执行下一条语句功能。while(....){ ... break; ...}d
原创
38阅读
0评论
0点赞
发布博客于 7 月前

必须知道的C语言知识细节:|和||、&和&&区别

||和|,&和&&是初学者容易混淆的运算符。从运算符种类来看,两者是完全不同的运算符。||是逻辑运算符,表示逻辑或;&&是逻辑运算符,表示逻辑与;|是位运算符,表示按位或;&是位运算符,表示按位与。逻辑运算符的优先级比位运算符优先级低。按位或运算符|表示将两个整数用二进制表示后,按位进行操作,只要有1位出现1则当前位的值为1,每一位运算取值有以下4种情况。0|0=0 0|1=1 1|0=1 1|1=1按位与运算符&表示将两个整数
原创
94阅读
0评论
0点赞
发布博客于 7 月前

必须知道的C语言知识细节:常量、#define、const区别

C语言中定义“常量”有三种方式,请注意,这里的“常量”是指实现等价的常量效果,例如数组长度100,圆周率PI等。备注:常量最大的特点是不可更改,编译时就知道其具体的值。第一种是严格意义上的常量,各种类型的字面值。C语言中严格意义的常量是指某种类型的具体值,例如整型值100,字符值 ‘a’,浮点型值3.14159,字符串常量"abcd",空指针常量NULL,枚举常量。例如:int r = 25; // 半径,25是常量,初始化赋值给变量rdouble s = rr3.14159; // 面积,3
原创
36阅读
0评论
0点赞
发布博客于 7 月前

必须知道的C语言知识细节:声明和定义

C语言中的声明(declaration)和定义(definition)是两个容易混淆的概念。声明只是给变量、函数、结构体、联合体命名,表明程序有该变量、函数、结构体、联合体。定义是具体给变量分配存储空间、给出函数的具体实现、指明结构体和联合体成员。简单理解:如果程序中仅仅有声明,缺少定义实现,最终无法生成可执行的程序,因为信息不完整,无法完成编译全过程。C语言中声明和定义的原则是:声明可以出现多次,定义有且只能出现一次。定义必须有,且只能出现一次。声明和定义可以同时出现。声明和定义可以分为以
原创
45阅读
0评论
0点赞
发布博客于 7 月前

必须知道的C语言知识细节:左值和右值知识总结

C语言中左值和右值概念是来自赋值或复合赋值表达式。初学者会很容易迷惑,这里给出这两个概念总结。对于赋值表达式E1=E2,其中E1必须是可修改的左值,E2是右值。左值:简写lvalue,left value右值:简写rvalue,right value例如:int m = 1; 很明显m是左值,1是右值。左值是指向内存区域的对象,左值可以出现赋值表达式的左边或右边,当左值出现的右边时,自动转换为右值使用。右值是指存储在内存中的数值本身,右值不能出现的赋值表达式左边,否则编译出错。例如:int
原创
59阅读
1评论
0点赞
发布博客于 7 月前

必须知道的C语言知识细节:i++和++i

i++是后缀自增运算符,++i是前缀自增运算符。正常情况下,执行完毕,两种等价,例如:int i=1;i++;int i=1;++i;执行完毕,i的值均为2。但是在复合的表达式中、函数调用中却有明显区别。i++,表示先取i的值进行表达式计算或函数调用,最后加法再计算 i=i+1;++i,表示先加法计算i=i+1,然后在进行表达式计算或函数调用。例如:int i = 1;int k1 = i++; // k1等于1i=1;int k2 = ++i; // k2等于2i = 1
原创
43阅读
0评论
0点赞
发布博客于 7 月前

必须知道的C语言知识细节:进制表示

C语言中表示数时经常提到二进制、八进制、十进制和十六进制表示。为方便理解,先介绍十进制。十进制:是指由0,1,2,3,4,5,6,7,8,9 十个数字表示的数,逢十进位,因此是十进制,可以看出十进制没有单独数字10,因为不需要,10可以用进1位表示。同理:二进制:是有0和1两个数字表示的数,逢2进位,所以二进制中不会出现2。八进制:是指由0,1,2,3,4,5,6,7 八个数字表示的数,逢8进位。十六进制:是指由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 十六个数字表示的数,
原创
52阅读
0评论
0点赞
发布博客于 7 月前

C、C++、Java到Python,编程入门学习什么语言好?

最近,TIOBE更新了7月的编程语言榜单,常年霸榜的C、Java和Python依然蝉联前三位。万万没想到的是,R语言居然冲到了第八位,创下了史上最佳记录。而且后续随着业内对数据统计和挖掘需求的上涨,R语言热度颇有些势不可挡的架势。然而作为程序员吃饭的工具,编程语言之间也形成了某种鄙视链,各大论坛里弥漫着剑拔弩张的气氛,众口难调。也难怪有很多初学者会有疑惑,为什么会有这么多编程语言,我到底应该学什么语言?回顾编程语言几十年来的兴衰起伏,似乎也折射了整个信息产业的变迁消亡,想要在技术的洪流里激流勇进,找准
原创
245阅读
0评论
0点赞
发布博客于 7 月前

计算机专业学生毕业去大公司好还是小公司好?

作为一个程序员在选择公司的时候到底应该是选择大厂好还是小厂好呢?一直以来,如何选择公司是大家很关注的问题,徐老师经常收到大家类似的提问。于是,为了减轻小伙伴们的疑惑,徐老师专门整理了以下建议,希望可以给处于混沌状态的你一些参考。在我们进行选择的时候经常会听到这么两个声音:选择大公司好,因为大公司的工资高,福利好,工作安稳有保障;选择小公司好,小公司可以让你快速的学习,在大公司里只能做颗螺丝钉。在做选择前我们先来了解下大小公司各自的优缺点。大公司一般是指人数在100人以上的公司。它一般具.
原创
195阅读
0评论
0点赞
发布博客于 7 月前

整数在内存中的存储大家都知道,那么小数是怎么存储的呢?

整数在内存中的存储方式比较简单,我们来看看小数在内存中的存储方式。首先,要学会十进制小数与二进制小数之间的转换。(1)二进制小数转化为十进制小数比如把二进制小数110.11转化为十进制小数,步骤如下:(2)十进制小数转化为二进制小数方法:1,先分别把十进制小数的整数部分和小数部分转化为二进制2,然后合并当然整数部分很简单,直接进行二进制转化,而小数部分就不一样了。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行
原创
113阅读
0评论
0点赞
发布博客于 7 月前

计算机类专业都有什么区别?

随着社会日新月异的发展,计算机专业,逐渐变得炙手可热,也正因为如此,在选择这个专业的时候,应该结合自己的兴趣和未来想从事的职位进行综合考量。那第一步,就是给自己建立一个计算机及相关系统的认知,那首先先来问问你,你知道现代计算机生态系统都有哪些分类吗?计算机及相关系统可以简单划分为如下概念:计算机硬件计算机软件计算机网络计算机硬件就是组成计算机的物理条件,目前都是基于图灵系统构造的。包含了计算机、单片机等。当然还有相应的周边硬件也可以属于计算机硬件,比如打印机、路由器等。计算机软件分.
原创
332阅读
1评论
1点赞
发布博客于 7 月前

C++ 手把手教你实现可变长的数组

—***** 1******—*要实现什么函数呢?假设我们要实现一个会自动扩展的数组类,我们需要实现函数呢?先从下面 main 函数使用的功能,看看有什么函数是需要我们实现的。输出结果:0 1 2 3 4要实现如上的功能,要做哪些事情呢?先列出来:要用动态分配的内存的方式,来存放数组元素,且需要一个指针成员变量重载赋值 = 运算符重载括号 [] 运算符重载复制构造函数实现 push_b
原创
200阅读
0评论
0点赞
发布博客于 7 月前

在走往C语言C系列编程程序员的路上,读这篇文章让你不易走偏!

作为想去往程序员的路上,C++是一个必须学会的编程语言,下面我就我学习的C++知识和大家谈谈,C++的入门知识汇总。首先先来看一个最基础的简单程序:#includeusing namespace std;void main(){coutcoutgetchar();}这程序的执行结果就是在屏幕中成功输出一段话作为入门学者,往往只有看到程序执行完后有数据输出才的判断自己的程序是否编写正确,但是这其实只能表明你的程序没有编译错误,至于程序有没有问题这就涉及到软件测试的相关知
原创
64阅读
0评论
0点赞
发布博客于 7 月前

17条嵌入式C语言编程小知识总结

流水线被指令填满时才能发挥最大效能,即每时钟周期完成一条指令的执行(仅指单周期指令)。如果程序发生跳转,流水线会被清空,这将需要几个时钟才能使流水线再次填满。因此,尽量少的使用跳转指令可以提高程序执行效率,解决发案就是尽量使用指令的“条件执行”功能。在LPC2200系列中:可以通过过下面的程序延迟10毫秒:for(i=0;i<200;i++){for(j=0;j<200;j++);}通过下面语句将一个16位的变量放在两个8位的变量中。//IP数据报总长度高字节..
原创
47阅读
0评论
0点赞
发布博客于 7 月前

不同薪资的代码,差别在哪里?

看这代码水平如何?开8k的工资我就写8k的代码,开20k的工资我就写20k的代码。下面这代码可读性爆表了!*测试:没BUG呀产品:功能实现了呀考核:代码提交足行队友:*太简洁易读了一本书上说,下面的 C 语言代码可能会产生无限循环。****你看出Bug在哪里吗?雷军1994年写的汇编代码,你见过吗?其实做为一个学习者,有一个学习的氛围跟一个交流圈子特别重要这里我推荐一个C/C++基础交流583650410,不管你是小白还是转行人士欢迎入驻,大家一起交流成长。...
原创
164阅读
0评论
0点赞
发布博客于 7 月前

深度探索C++对象模型:类的大小

现在有这样一段代码:class X { }; class Y : public virtual X { }; class Z : public virtual X { }; class A : public Y, public Z {}; 对 class X、Y、Z、A 进行 sizeof 运算结果是什么呢?如果你心里已经有了答案,不妨看完下面的分析再说。C++ 初学者常有一个错误
原创
38阅读
0评论
0点赞
发布博客于 7 月前

深度探索C++对象模型:成员变量的初始化列表

对 class members 的初始化操作可以放在 member initialization list 或者 construct 中进行,但两者之间是有一些区别的,无论是在效率上还是在语法上。何时应该使用 initialization list ?在语法方面来说,为了程序可以通过编译,下面几种情况必须使用 initialization list :当初始化一个 reference member 时当初始化一个 const member 时当调用一个 base class 的 construct
原创
34阅读
0评论
0点赞
发布博客于 7 月前

为什么看到这么多人不推荐C++?

2000年左右是C++的鼎盛期,游戏,图形界面,科学计算,后台服务,各种新语言的实现语言,甚至入侵了一点操作系统里C的地盘。一项技术,火起来蜂拥而上,泥沙俱下,平稳后发现后劲不足,或者有另一个风口出现,便如树倒萎溃散。进化是好事,进化的同时要吸取经验,避免出现返祖现象。C++之父写过一本神书,«C++语言的设计和演化»,鄙人孤陋寡闻,似乎这是唯一一本阐述语言设计理念、折衷的辛苦无奈历程,Bjarne 在书中提出了很多极具智慧的设计理念,比如时下小火的俨然C++继任者 Rust 也极为推崇的“零代价抽象.
原创
58阅读
0评论
0点赞
发布博客于 7 月前

深度探索C++对象模型:拷贝构造函数

对象之间的拷贝操作发生对象之间拷贝操作的三种情况:用一个 object 对另一个 object 进行初始化操作当 object 被用作函数参数时当一个函数返回值为一个 object 时如果一个 class 明确定义了 copy constructor ,那么在上述几种情况中会调用该 copy constructor ,但如果一个 class 没有定义 copy constructor 呢?转载请
原创
29阅读
0评论
0点赞
发布博客于 7 月前

深度探索C++对象模型:默认构造函数

默认构造函数在被需要的时候被编译器产生出来。这句话的关键部分是:被谁需要?什么时候被需要?做什么事情?被谁需要?编译器为程序构建默认构造函数是因为编译器需要它,而不是因为程序需要它。程序需要什么应该是程序员的责任,应该由程序员提供。举个例子,例如下面这段代码:class Foo { public: int val; Foo* pnext; } void foo_bar() { Foo bar; // 程序需要 bar's members 都被初始化为
原创
59阅读
0评论
0点赞
发布博客于 7 月前

深度探索C++对象模型:三种对象模型

引言现在有一个 Point 类,声明如下:class Point { public: Point(float xval); virtual ~Point(); float x() const; static int PointCount(); protected: virtual ostream& print(ostream &os) const; float _x; static int _point_count;};这个
原创
31阅读
0评论
0点赞
发布博客于 7 月前

C语言编程需要掌握的核心要点有哪些? 为你总结了这20个

摘要: C语言作为编程的入门语言,学习者如何快速掌握其核心知识点,面对茫茫书海,似乎有点迷茫。为了让各位快速地掌握C语言的知识内容,在这里对相关的知识点进行了归纳。C语言精简的语法集和标准库,让我们可以把精力集中到设计等真正重要的事情上来,而不是迷失在语法的海洋里,这对于初学者尤其重要。虽然C语言有抽象不足的缺点,但我更喜欢它的精巧,只需要花少量的时间,研究清楚它每一个知识点,看任何C源码就不会存在语法上的障碍,大家需要建立的知识共识足够少,少即是多,少好于多。编程语言有很多种,比如JAVA,PHP,P
原创
138阅读
0评论
0点赞
发布博客于 7 月前

如何把C++的源代码改写成C代码

C++解释器比C语言解释器占用的存储空间要大,想要在某些特定场合兼容C++代码,同时为了节省有限的存储空间,降低成本,也为了提高效率,将用C++语言写的源程序用C语言改写是很有必要的。C++与C区别最大的就是C++中的类的概念和特性,将C++改为C的问题,就转换成如何将类化去的问题。方法有两种:将C++中的面向对象特征去掉,先全部理解源代码的逻辑,然后改写;是在C中保留面向对象的部分特征,用结构体实现类的功能。第一种方法,对于类的数目很少的情况还可以,如果类的数目比较多,全部理解源代码,然后重
原创
307阅读
0评论
0点赞
发布博客于 7 月前

2020年7月编程语言排名,C语言与Java拉大距离,黑马R排名第八

TIOBE编程社区2020年7月编程语言排行榜如期而至,你的生活工作是否也是这样如期而至呢?看看7月编程语言排行榜又有哪些变化呢?你所心仪的编程语言有什么变化吗?7月份编程语言榜单中,C语言依旧占据第一的位置。其中变化比较大的就是本年度的黑马R语言,一路上升,进入前10名,本月排名第8,创造了新的历史记录。根据TIOBE编程社区的分析建议,R语言的流行主要在python语言提升中不断的增加。有两种趋势会增强R语言,一是商业统计语言和软件包时代已经结束,在统计分析中更多的大学和研究机构采用的是python
原创
51阅读
0评论
0点赞
发布博客于 8 月前

10个值得程序员关注的C语言开源项目

十个最值得阅读学习的C开源项目代码1.Webbench2. Tinyhttpd3. cJSON4. CMockery5. Libev6. Memcached7. Lua8. SQLite9. UNIX v610. NETBSD1. WebbenchWebbench 是一个在 linux 下使用的非常简单的网站压测工具。它使用 fork ()模拟多个客户端同时访问我们设定的 URL,测试网站在压力下工作的性能,最多可以模拟 3 万个并发连接去测试网站的负载能力。Webbenc
原创
40阅读
0评论
0点赞
发布博客于 8 月前

还用C/C++开发应用的程序员,这六大工具请查收!

1、CcacheC/C++程序的编译过程可能需要很长时间,Ccache是为了减轻一些编译负担。顾名思义,它是一个缓存,可以保存编译代码以便重用,如果相邻的几次编译运行没有改变代码,那么给定项目的运行时间越长,加速越多。它以逐个文件为基础,采用简单的MD4哈希算法来确定给定文件是否需要重新编译。不支持编译器的某些命令行命令,当Ccache无法知晓下一步该做什么时,它将返回原始编译器。2、TCC“T”代表“小”,“CC”代表“C编译器”。这个C99兼容编译器的二进制分发只有1.5MB。不仅小,TCC还超快
原创
98阅读
0评论
0点赞
发布博客于 8 月前

二叉树(Binary Tree)的建立与遍历——C语言实现

一、运行环境简介编辑器:VSCode + MicroSoft原生插件;????‍????运行环境: MinGW ;????‍????常用指令: gcc mian.c -o mian.exe二、二叉树的定义这里我们直接采用浙大数据结构课程中的代码。因为这种写法清晰明了,且便于后续扩展。typedef char ElementType;typedef struct TNode *Position; /* 结构体指针 */typedef Position BinTree; /* 二叉树类型 */
原创
149阅读
0评论
0点赞
发布博客于 8 月前

C语言结构体用法很多,坑也很多

C语言可谓是编程界的传奇语言,历经几 十 年,依然排名前列。本文主要说的是C语言中的结构体,结构体是C语言中重要的一部分内容,也是C语言中常用的一种数据结构。一、关于结构体在C语言中,结构体(struct)指的是一种数据结构,是C语言中复合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。
原创
120阅读
0评论
0点赞
发布博客于 8 月前

《C语言》—— 数组详解

数组的基本概念我们把一组数据的集合称为 数组(Array) ,它所包含的每一个数据叫做 数组元素 (Element),所包含的数据的个数称为 数组长度 (Length),数组中的每个元素都有一个序号,这个序号从0开始,而不是从我们熟悉的1开始,称为 下标 (Index),所包含数组的里面元素的类型叫做 数组类型 (Type)。一句话就说清楚了数组的基本概念,就是这么简单,_。数组底层结构探析1int
原创
83阅读
0评论
0点赞
发布博客于 8 月前

C++程序员快要被市场淘汰了吗?

虽然这个语言整体感觉难度不小,而且在入行前两年用起来很不爽,但随着时间推移每天不折腾几行代码心理还觉得难受已经养成多年习惯了,现在国内软件市场应用级别的开发更多一点,所以高级语言的发展空间也会更大一点,比如java,php等高级语言的职位存在感极强,倒是让人觉得C/C++有点被市场淘汰的感觉,真实的场景是C/C++依然占据非常关键的位置,在客户端开发以及底层系统开发占据着极其重要的作用。说C/C++被市场淘汰的人说明对这个行业不是很熟悉或者压根就是门外汉,不可能所有的人都转向上层应用的开发,还需要一批耐
原创
120阅读
0评论
0点赞
发布博客于 8 月前

为什么C语言是最适合单片机编程的高级语言

单片机为什么还在用C语言编程?答案是:C语言是最适合单片机编程的高级语言。这个问题的意思应该是:现在有很多很好用的高级语言,如VC等等,为什么这些语言不能用来编写单片机程序呢?那么这个问题的答案就是:不能不能,而是不合适。一、单片机编程的特点对单片机编程来说,首先要考虑的是单片机的程序空间和数据空间都是有限的,所以要让程序尽量短小精悍,以节省程序占用的存储空间。第二、单片机编程的一个主要对象是对单片机的端口和内部寄存器的操作和配置,这个需要比较精确的时序控制。第三、单片机算法运算中,尽量使用加法、
原创
132阅读
0评论
0点赞
发布博客于 8 月前

C++ 被炮轰是糟糕的语言 !

这位知名游戏《The Witness》的开发者还介绍了他新开发的编程语言,有望将工作效率提升50%至80%。2014 年的某个时刻,Jonathan Blow仍在开发《The Witness》这款游戏时,突然觉得敲代码是一种悲惨的经历。为什么是那样呢?用 Blow 的话来说,那是由于C++是一种“非常非常糟糕的语言。”上周他在巴塞罗那的Gamelab大会上演讲时阐述了他认为这种常用编程语言的诸多问题,以及他希望通过自行研发的替代语言Jai来实现的目标。Blow认为,C++的主要缺陷在于它是一个非常
原创
74阅读
0评论
0点赞
发布博客于 8 月前

一个经典且稍有难度的C面试题,值得一看!

题目是这样的:在一个整数数组中1个数出现了3次,其余的数都出现了2次,请找出出现3次的数。建议大家自己先思考一下,我们下面直接给出了解法。一、常规解法(3种)1.用两个循环,外层循环每次提供一个数,内层循环遍历数组进行比对,用另外的变量存储相等的次数,内层循环结束之后,如果存储次数的变量等于3,就输出这个元素,然后退出,否则外层循环提供下一个值,继续上述过程。for(i=0;i<SIZE;i++){ n=0; for(j=0;j<SIZE;j++) if(src[i
原创
54阅读
0评论
0点赞
发布博客于 8 月前

大数据解析:程序员到底能干到多少岁?

程序员这个职业究竟可以干多少年?大多数程序员都认为程序员是个吃青春饭的职业,编程这个事只能干到30岁,最多35岁吧。每每听到这样的言论,都让人感到相当的无语……今天,我们又来谈这个老话题……首先,我们先来看一篇论文《Is Programming Knowledge Related to Age?》(英文版),这篇论文是两个北卡罗纳州立大学计算机科学系的两个人对StackOverflow.com上的用户做了相关的数据挖掘得出来的一些数据。(StackOverflow.com上的数据是公开的,任何人都可以
原创
539阅读
0评论
0点赞
发布博客于 8 月前

C语言宏定义的妙用!用完软硬件效率蹭蹭涨!

1 概述在工程规模较小,不是很复杂,与硬件结合紧密,要求移植性的时候,可采用宏定义简化编程,增强程序可读性。当宏作为常量使用时,C程序员习惯在名字中只使用大写字母。但是并没有如何将用于其他目的的宏大写的统一做法。由于宏(特别是带参数的宏)可能是程序中错误的来源,所以一些程序员更喜欢使用大写字母来引起注意。简单宏定义无参宏的宏名后不带参数,其定义的一般形式为:#define 标识符 字符串// 不带参数的宏定义#define MAX 10注意:不要在宏定义中放置任何额外的符号,比如"=“或者
原创
81阅读
0评论
0点赞
发布博客于 8 月前

应该如何学习C语言?给学习C语言的同学几点建议

初学C语言的朋友应该首先了解C语言关键的核心概念(结构化、三个执行流程、优先级、指针、文件、共用体、函数、作用域、重载等 ),只有弄明白了这些才能在今后的学习中游刃有余的把握C语言的精髓。这几个概念就像逻辑线一样,把整个C语言的体系贯穿起来,给人一种“结构化”的思想体系。下面我简要谈一下这几个核心概念。1、从宏观角度来看,结构化是C语言的编程思想基础,就是说C语言每一个功能模块就是一个结构,每一个结构实现一个运算或一个算法,这个结构就用大括号表示“{ }”,大括号里面的就是算法。尤其注意的是大括号的“}
原创
85阅读
0评论
0点赞
发布博客于 8 月前

学习开发环境和编程语言:汇编语言和C语言的比较

今天来学习开发环境和编程语言。CPU懂的机器语言单片机的CPU从存储器读取程序,但是一次只能读取一条指令,然后解释每条指令,并执行。存储器中保存的内容,不管是程序还是数据,都是二进制代码“0”和“1”组成的字符串。指令二进制代码告诉CPU要做什么,而数据二进制代码则是CPU操作或处理指令时要使用的值。CPU的操作包含加、减运算等指令。这些像密码一样排列的“0”和“1”字符串就是机器语言。比如图1左边显示的就是一个机器语言指令,意思是“将2放入寄存器A(寄存器是CPU内部的储存区域)。CPU总是按存储器
原创
68阅读
0评论
0点赞
发布博客于 8 月前

深度分析C语言和其他高级语言的区别

提到C语言,我们知道c语言和其他高级语言的最大的区别就是C语言是要操作内存的!我们需要知道——变量,其实是内存地址的一个抽像名字罢了。在静态编译的程序中,所有的变量名都会在编译时被转成内存地址。机器是不知道我们取的名字的,只知道地址。内存的使用时程序设计中需要考虑的重要因素之一,这不仅由于系统内存是有限的(尤其在嵌入式系统中),而且内存分配也会直接影响到程序的效率。因此,我们要对C语言中的内存管理,有个系统的了解。在C语言中,定义了4个内存区间:代码区;全局变量和静态变量区;局部变量区即栈区;动态存储
原创
302阅读
0评论
0点赞
发布博客于 8 月前

初学C语言 先搞懂这些基础知识再谈深度学习吧!

很多初学者都会问我,“我想学C,该怎么开始呢?”,今天我们就来聊一聊,属于初学者必须懂的知识,希望小伙伴们,能够牢记基础知识,唯有不断努力 才能更加顺利。基本常识计算机语言: 把人与计算机之间交流的语言叫做计算机语言计算机语言分为高级语言和低级语言高级语言:远离硬件低级语言:贴近硬件指令: 是指计算机执行某种操作的命令它由一串二进制数码组成。一条指令通常由两个部分组成: 操作码+地址码操作码指明该指令要完成的操作的类型或性质如取数、做加法或输出数据等地址
原创
51阅读
0评论
0点赞
发布博客于 8 月前

百万C++程序员的启蒙书,畅销20余年,这部经典终于出配套习题解答了!

在编程的世界里,很多语言来了又走,而C++却屹立了30年,并在21世纪仍保持强劲势头。去年,C++之父Bjarne Stroustrup公布了C++20添加的新特性,让众多程序员炸了锅。其中一个新特性——模块(Modules),至少让代码编译速度提升5倍以上。Bjarne Stroustrup的理念是,一种语言不应该只能实现设计者想得到的功能,它必须有能力做得更好。这种追求“更好”的理念,也让C++在30年里经久不衰。伴随C++长盛不衰的,还有一本畅销了20余年、引领百万程序员进入C++世界的经典图书
原创
61阅读
0评论
0点赞
发布博客于 8 月前

C语言永久不会过时?

01、为什么C语言不会过时评价任何一门编程语言,都是招人骂的。永远是这样。就像是春寒料峭的季节,街上穿棉袄和穿单衣的擦肩而过,双方一定是同时在心里出现了两个字:“傻逼!”这个在心理学上有个专业的名字:叫做“二逼”现象!那我为啥还要做这个挨骂的事呢?作为《C语言点滴》《drop of knowledge of C++》书籍的作者,《C语言新思维,第二版》的译者(赵岩老师),我觉得我有责任系统的介绍一下这本语言,他的特点,还有他的未来。这个问题对很多刚刚踏入程序猿这个行业的新手至关重要。因为他们有深深的担.
原创
176阅读
0评论
0点赞
发布博客于 8 月前

作为一个优秀的程序员,真的需要精通C语言吗?

从事开发几年,使用C语言开发已经超过数个年头,除了C语言还用C++,java,python做项目,程序员的优秀编程语言仅仅占据一部分,而且也不会只是针对C语言,现在很多的编程高手也不懂的C语言,因为行业领域不同展示出来的点也不太一样,有些java高手对于C语言甚至都没有接触过,难道就说这不是优秀的程序员,现在的编程语言已经趋向于高级化集成化,从招聘比例上看对C语言的需求远远低于JavaScript,Python等编程语言。但从绝对的招聘数量上C语言总体来讲也不在少数,因为在嵌入式领域,通讯领域,以及对性
原创
251阅读
1评论
0点赞
发布博客于 8 月前

什么是好的c/c++程序员?c/c++程序员就应该有c/c++程序员的修养

什么是好的c/c++程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对于速度快,只要编得多也就熟能生巧了。C/C++学习我认为好的c/c++程序员应该有以下几方面的素质:1、有专研精神,勤学善问、举一反三。2、积极向上的态度,有创造性思维。3、与人积极交流沟通的能力,有团队精神。4、谦虚谨慎,戒骄戒燥。5、写出的代码质量高。包括:代码的稳定、易读、规范、易维护、专业。C/C++学习我看过许多
原创
43阅读
0评论
0点赞
发布博客于 8 月前

非科班出身要成为C/C++工程师,如何成为一名优秀的C++程序员

计科专业毕业算是科班出身,从事软件开发多年,主要在嵌入式领域研究的比较多,为了赶时髦在互联网公司也混了几年,主要有三种开发语言,C/C++,java 别的语言在项目开发过程中也多少涉猎一些研究不是很深入,C/C++属于底层开发语言,讲究的是性能,主要在嵌入式领域以及客户端开发等方面用的比较多,底层开发语言比较皮实需要对计算机运行原理有一定的了解,不然第一次学起来可能会觉得有点吃力。学习C/C++之前需要做好什么准备?1、首先要坚定学习意志,学习任何东西不仅仅只是喊口号,要做好长期打硬仗的准备。就是从心
原创
220阅读
0评论
0点赞
发布博客于 8 月前

为什么C++ 程序员看不起php?

我觉得C++ 虽然速度快,但是编译起来很复杂,要写各种dependency 才不会导致因编译顺序产生的失败。namespace 的乱用和混用让人摸不着头脑。不同的Cpp可以共用一个h,你都找不到申明在哪里。PHP就好多了。类似java,文件名就是class 名,继承简单,完全面向对象。这就是面向对象编程的真正好处。看代码时很好理解,除了map, vector的操作很奇葩以外。既然如此,C++程序员为什么看不起PHP呢?写了2年php,写了4年c++。不是看不起php,只是觉得一个解释型脚本语言和一
原创
425阅读
0评论
0点赞
发布博客于 8 月前

为什么C++比C要麻烦?程序员这样回答,终于知道他为什么单身了

听过一个笑话,程序员们互相聊天,程序员A问到:为什么C++比C麻烦那么多?”程序员B回答道:“有了对象能不麻烦么。 ”同样衍生出来的还有一个小故事:情人节,有人看到C一个人喝酒,便问:你的好哥们C++、Java、Python他们呢?C说:都过情人节去了。问:你为什么不过呢?C说:因为我没有对象。​计算机行业的人都知道C、C++、C#,但对很多想要入行的人来说可能就有点迷茫了,就好像不知道java和JavaScript的关系一样,面对这个多个C,如何选择成为了他们的一个小问题。先简单
原创
50阅读
0评论
0点赞
发布博客于 8 月前

如何从初级程序员变成高级程序员?

区分高级和初级程序员的标准是工作年限吗?程序员最重要的工作就是写代码吗?高级程序员是一名犯过其领域内所有可能犯到的错误的专家。如果按照工作经验对软件开发人员进行分类,可能是这样的:初级:2-3 年工作经验高级:10 年以上工作经验中级:介于初级和高级之间这种按工作年限的分类存在一个问题。那就是:它对软件开发的质量只字未提。在工作的那些年里你到底获得了多少经验和技能?这正是面对开发人员的求职和面试如此复杂的原因。度量技能是很困难的,所以我们在面试中给开发人员进行了很多有难度的测试。但这些测试充其量
原创
131阅读
0评论
0点赞
发布博客于 8 月前

工作十年程序员详解C语言为什么要引入指针?

前言说起指针算是个 在 C\C++ 中老生长谈的话题,但是今天我从另外一个角度给各位看官分析一下为什么非要引入指针这个让人看到都头疼的东西? 想必学过指针的都被它的各种繁琐所折磨,另一种角度讲就是被他的灵活易用所征服。不知道大家学习过只要是带指针的地方,都可用使用非指针的东西去表达出来(你愿意的话),甚至比用指针看着还简便,所以问题也来了,为什么要引入指针呢?好处何在?正文在说为什么引入指针这个问题前先带大家了解一下什么是指针?指针最为简短的定义:指针即为内存的地址。  那什么是内存呢?
原创
131阅读
0评论
3点赞
发布博客于 8 月前

C++代码书写规范——给新手程序员的一些建议

代码就是程序员的面子,无论是在工作中在电脑上写程序代码还是在面试时在纸上写演示代码我们都希望写出整洁,优雅的代码。特别在工作中当我们碰到需要维护别人的代码,或者是多人参与一个项目大家一起写代码的时候,如果碰到一些丑陋的代码,我们还要看懂并且修改它的时候,那种难受,肯定会让我们回想起多年以前自己还是新手程序员的时候,写下的那些丑陋的代码,并且深深内疚于将它们留给了我们的后继者,不知道他们和它们是否还安好。所以,强调代码的规范性,写出整洁,优雅,可读性高的代码应该是成为一个合格的程序员的第一步。这里我就抛砖引.
原创
106阅读
0评论
0点赞
发布博客于 8 月前

资深程序员用c++开发MFC银行排队叫号系统,小白看了也能学会

这个C++ 银行排队叫号系统是看了书后写出来的程序,运用于MFC理念编写,我看的书是谭浩强的《C++面向对象程序设计》相对计科的书少了前六章 直接从对象讲起,这本书也是本班使用人数最多的一本。C++ 银行排队叫号系统编译环境:microsoft visual studio 2005或以上版本 dev c++ vc6.0都不可以。注意:调试程序时多线程调试一定要设为mtd代码展示:源码测试截图:下面我们来详细对这个问题的实现逻辑进行分析,让我们的程序能够给出类似下面的结果:使用 C++对
原创
95阅读
0评论
0点赞
发布博客于 8 月前

C语言最大难点揭秘:编程的祸根!

本文将带您了解一些良好的和内存相关的编码实践,以将内存错误保持在控制范围内。内存错误是 C 和 C++ 编程的祸根:它们很普遍,认识其严重性已有二十多年,但始终没有彻底解决,它们可能严重影响应用程序,并且很少有开发团队对其制定明确的管理计划。但好消息是,它们并不怎么神秘。引言C 和 C++ 程序中的内存错误非常有害:它们很常见,并且可能导致严重的后果。来自计算机应急响应小组(请参见参考资料)和供应商的许多最严重的安全公告都是由简单的内存错误造成的。自从 70 年代末期以来,C 程序员就一直讨论此类错误,
原创
107阅读
0评论
0点赞
发布博客于 8 月前

各路大牛的C语言编程建议和技巧,看完感触颇深

我们鼓励在编程时应有清晰的哲学思维,而不是给予硬性规则。我并不希望你们能认可所有的东西,因为它们只是观点,观点会随着时间的变化而变化。可是,如果不是直到现在把它们写在纸上,长久以来这些基于许多经验的观点一直积累在我的头脑中。因此希望这些观点能帮助你们,了解如何规划一个程序的细节。(我还没有看到过一篇讲关于如何规划整个事情的好文章,不过这部分可以是课程的一部分)要是能发现它们的特质,那很好;要是不认同的话,那也很好。但如果能启发你们思考为什么不认同,那样就更好了。在任何情况下,都不应该照搬我所说的方式进行编程
原创
143阅读
0评论
0点赞
发布博客于 8 月前

C语言与C++学习路线

有人说:“C生万物,编程之本”,这一点都没有错!C语言是最接近计算机的语言,很多时间,我们都会发现,C语言是非常有必要学习的。C语言数据类型、变量、内存布局、指针基础;字符串、一维数组、二维数组;一级指针,二级指针,三级指针,N级指针概念,指针数组和数组指针;结构体、文件的使用;动态库的封装和设计;函数指针回调函数。配套视频:轻松掌握C语言视频教程(会打字就能学会)全国计算机等级考试二级c语言视频教61节课浙大翁恺C语言入门C语言提高深入浅出七日成蝶之C语言数据结构经典合集高级视
原创
69阅读
0评论
0点赞
发布博客于 8 月前

C语言十大经典排序算法(动态演示+代码,值得收藏)

以前也零零碎碎发过一些排序算法,但排版都不太好,又重新整理一次,排序算法是数据结构的重要部分,系统地学习很有必要。时间、空间复杂度比较排序算法平均时间复杂度最差时间复杂度空间复杂度数据对象稳定性冒泡排序O(n2)O(n2)O(1)稳定选择排序O(n2)O(n2)O(1)数组不稳定、链表稳定插入排序O(n2)O(n2)O(1)稳定快速排序O(n*log2n)O(n2)O(log2n)不稳定堆排序O(n*log2n)O(n
原创
242阅读
0评论
0点赞
发布博客于 8 月前