自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(174)
  • 收藏
  • 关注

原创 初学者是学习 C 语言还是 C++ 好?各有何利弊?

值得一提的是,每一个新风格的叠加都是在现有系统的基础上实现(比如设计C的时候根本不会想到还会扩展为C++,而C++必须高度兼容C),这是一个非常有挑战的工作,C++之父Bjarne Stroustrup的《The Design and Evolution of C++》就描述了部分C++语言设计的过程,非常有价值。3:基础库屏蔽了大量初学者容易出错的细节,以STL的string为例,这个库虽然简单,但是居然在C之上搭建的C++中实现了和许多现代的很高级的语言使用字符串一样的体验。语法简洁,容易上手。

2022-10-20 18:44:06 1859

原创 C语言/C++内存管理

否则在之后的开发者会误以为是个正常的指针,就有可能再通过指针去访问一些操作,但是在这时该指针已经无用,指向的内存也不知此时被如何使用,这时若出现意外将会造成无法预估的后果,甚至导致系统崩溃,在 malloc 的使用中更需要需要。释放后使用,产生悬空指针。在函数中首先使用 val 值接收 freep 的值,将 val 乘 2,之后释放 free,重新赋值给 val,最后使用 val 再次乘 2,此时造成的结果出现了极大的改变,而且最恐怖的是该错误很难发现,隐蔽性很强,但是造成的后顾难以承受。

2022-10-19 19:29:25 2289

原创 用C语言实现C++ 继承与多态

功能,在调用创建的类函数时就十分不安全,在基类加入基类类型名和类大小成员变量可以解决这个问题。就是当创建一个类时,不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。的方式,即把基类作为派生类的成员变量之一。,即只拷贝了地址,没有拷贝地址的内容。举个例子:人是动物,人具有动物的行为和属性,但人也有动物所不具备的行为和属性。在上个例子中,人和动物都有会动的属性,但人的动作和动物的动作从表现上会有所不同。就可以实现在同一个函数中,根据对象类型的不同,函数实现方式也不同。

2022-10-18 15:57:14 502

原创 C语言与C++常见问答题(二)

所以将析构函数声明为虚函数是十分必要的。举个例子:一个父类类型的指针指向一个子类对象时候,使用父类的指针去调用子类中重写了的父类中的虚函数的时候,会调用子类重写过后的函数,在父类中声明为加了virtual关键字的函数,在子类中重写时候不需要加virtual也是虚函数。set中元素是经过排序的,红黑树也是有序的,哈希是无序的 如果只是单纯的查找元素的话,那么肯定要选哈希表了,因为哈希表在的最好查找时间复杂度为O(1),并且如果用到set中那么查找时间复杂度的一直是O(1),因为set中是不允许有元素重复的。

2022-10-15 16:24:07 299

原创 C语言与C++常见问答题

可以看到fun函数中pa ,pb之间互相引用,两个资源的引用计数为2,当要跳出函数时,智能指针pa,pb析构时两个资源引用计数会减一,但是两者引用计数还是为1,导致跳出函数时资源没有被释放(A B的析构函数没有被调用),如果把其中一个改为weak_ptr就可以了,我们把类A里面的shared_ptr pb_;运行结果如下,这样的话,资源B的引用开始就只有1,当pb析构时,B的计数变为0,B得到释放,B释放的同时也会使A的计数减一,同时pa析构时使A的计数减一,那么A的计数为0,A得到释放。

2022-10-14 19:02:33 398

原创 学c++要不要先学C语言?

不,首先学习C++。C++ 的C子集对于C/C++ 的新手是比较容易学的,又比C本身容易使用。原因是C++(通过强类型检查)提供了比C更好的保证。进一步说,C++ 还提供许多小特征,例如运算符new,与C语言对应的东西相比,它们的写法更方便,也更不容易出错。这样,如果你计划学习C和C++(而不只是C++),你不应该经由C那条迂回的路径。为能很好地使用C,你需要知道许多窍门和技术,这些东西在C++ 里的任何地方都不像它们在C里那么重要、那么常用。

2022-10-13 19:12:42 2708

原创 C++的左值(lvalue)和右值(rvalue)

lvalue(左值)、rvalue(右值)这些术语来自C语言(当然,C语言的术语习惯也可能来自更早的语言,Gemfield就不追溯了)。在C语言中,lvalue和rvalue中的l和r是left和right,分别代表着赋值表达式(等号)的左边和右边。并且:其中等号左边的g1必须是lvalue,g2可以是lvalue或者rvalue。但其实把lvalue中的l看成是location就容易理解,就是lvalue是有直接的memory location的,而rvalue没有。比如:gem是lvalue

2022-10-12 19:30:24 2219

原创 C语言学习教程

空格将语句的一部分与另一部分分开,并使编译器能够识别语句中的一个元素(比如:int)在哪里结束,而下一个元素在哪里开始。一个C程序由若干标记(token)组成,标记可以是关键字(keyword)、标识符(identifier)、常量(constant)、字符串文字(string literal)或符号(symbol)。最近在学习CSAPP(深入理解计算机系统(第三版))的过程中深感自己C语言的基础有多薄弱,因此打算好好再系统的学习一遍C语言。在C程序中,分号(Semicolons)是语句终止符。

2022-10-11 19:04:40 3479

原创 如何从c语言过渡到c++呢?

一开始就提到,C++和C的不同在于C++丰富的函数库,其中最方便的是STL(一个库名)。很多书会讲这一个库单独拿出来讲,其中包括一些非常方便的容器(vector、map),现在看不懂也没关系,这个是需要花时间学的。从C过渡到C++只需要一个下午(C基础好),但是学会使用C++的各种函数,需要花很久。这本书很厚,但是不需要看完,就像用字典一样看它就可以(用来看各种函数定义)。如果你已经明白上面4个C++的特点的话,那现在你用C编写代码有多顺畅你用C++就可以同样顺畅了。(C语言版)uva11000.

2022-10-10 18:52:23 1340

原创 为什么C语言能长盛不衰?

这个问题不好正向回答。正向逻辑是“因为C语言好,所以长盛不衰”。但是大家都知道好东西未必就不可替代,甚至还有“劣币驱逐良币”的情况。C语言本身的好或坏,并不是长盛不衰的充分条件。所以我想试着反向分析一下:当我们去试着替换C语言的时候,会发现什么。

2022-10-08 19:02:03 4744 3

原创 C语言基础知识入门(大全详解)

C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课!简单来说,一个C程序就是由若干和组成。一个C程序有且只有一个主函数,即main函数。 注释是写给程序员看的,不是写给电脑看的。C语言注释方法有两种:多行注释: 单行注释: C语言规定,标识符可以是字母(A~Z,a~z)、数字(0~9)、下划线_组成的字符串,并且第一个

2022-10-07 20:26:11 6093

原创 软件工程的就业前景如何?程序员的发展前景如何?

软件工程这一计算机类学科对口各类型的互联网大厂、工业界、外企,因此,依据时代机遇、顺势而为,是大部分软件工程学科同学的选择。就业方向也有开发、算法、基础架构、测试等方向。同公司同级别的工资待遇一般:算法基础架构 > 开发 > 测试,以上方向入门难度顺序与工资完全相反。如果对这个专业有兴趣,不妨看看下面的详细介绍:学科本身、学科知识结构、深造与就业、专业氛围。

2022-10-06 19:20:22 3556

原创 C语言的现在与未来

为什么要使用C语言?在过去的四十年里,C语言已经成为世界上最流行、最重要的一种编程语言。C是一种融合了控制特性的现代语言,而我们已发现在计算机科学的理论和实践中,控制特性是很重要的。其设计使得用户可以自然地采用自顶向下的规划,结构化的编程,以及模块化的设计。这种做法使得编写出的程序更可靠,更易懂。

2022-10-05 19:13:59 600

原创 c++基础--为什么要使用迭代器?

各种语言实现迭代器的方式皆不尽同,有些面向对象语言像JAVA,C#,Ruby,Python,Delphi都已将迭代器的特性内置语言当中,完美的跟语言集成,我们称之隐式迭代器(implicit iterator),但像是C++语言本身就没有迭代器的特色,但STL仍利用模板实现了功能强大的迭代器。STL容器的数据的内存地址可能会重新分配(reallocate),与容器绑定的迭代器仍然可以定位到重新分配后的正确的内存地址。它们都有显示、查询和排序等功能,常规思维是每个容器类中有自己的显示,查询和排序等函数。

2022-09-29 20:01:59 579

原创 C语言和C++有什么区别?

的出现的确是为了更方便地开发大型应用程序,毕竟面向对象编程里的很多重要思想和机制都对大型项目和复杂系统所要求的项目工程化、代码复用性/扩展性/可维护性等提供了强大的支撑。编程的书,一开始前几个章节基本都是在讲「面向过程编程」的内容,包括但不限于:数据类型、变量、运算符、表达式、语句、判断、循环、函数、指针等等这些内容。语言的书籍剖析得细致和全面的,不然也不会有这种重点侧重于指针相关的《C和指针》等这类书籍的出现了。因为市面上在售的大部分讲。编程的书,开始的章节都在讲「面向过程编程」的内容。

2022-09-28 19:28:55 161

原创 C 语言指针怎么理解?

而指针虽然也有类型,但是却并不是要求一定要指向该类型的数据(至于指针的类型的作用后面会讲),指针有点像万能钥匙,虽然指定打开这某种门,但是其他门也是可以打开的(当然读取数据可能会有错误),更厉害的是可以移动任意位置(算术运算挪动指针指向)去打开其他门,门牌号(内存地址)也是暴露给我们的。(上面的比喻可能不是很恰当或者难以理解,简单来说就是我可以使用指针直接操作内存,读也好,写也好,怎么样都好,内存的数据尽在我手中,内存的命运尽在我手中,我想读哪里的数据,我想往哪里写什么数据,都随我意。

2022-09-27 19:06:20 478

原创 数组初体验

程序中也需要容器,只不过该容器有点特殊,它在程序中是一块,它还有个好听的名字叫数组。可以将数组理解为大小固定,所放物品为同类的一个购物袋,在该购物袋中的物品是按一定顺序放置的。数组只声明也不行啊,看一下数组是如何初始化的。我们将数据放到数组中之后又如何获取数组中的元素呢?如:初始化一个数组那么arr[0]就是元素1。

2022-09-26 19:48:59 97

原创 为什么C语言永远不会过时?

有想了解这方面的知识的可以,订阅一个linux内核开发的邮箱,能自动收到linux内核里面提交的bug,解决bug的代码,以及提出一些建设性的意见,每天都能收到成百上千的邮件。从世界编程语言的范围看,C语言的排名稳居前三,只不过最近几年由于国内互联网发展的比较迅猛,比较前沿的开发语言用的多一点,似乎是觉得C语言的市场相对少了,放眼全球C语言排名依然很可观,有题图为证。常见的底层库比如网络接收,底层图形绘制库等对性能要求非常高底层软件库,基本上是C语言和汇编的结合体,C语言相对占比更高。

2022-09-23 19:11:58 91

原创 C语言struct为什么要内存对齐

C语言中的struct会做内存对齐,这个已经是被广为人知的,但是网上对于内存对齐的原因的解释却比较少,很多资料仅仅是说为了“提高读写效率",这个理由其实还是很难有说服力。的位宽是8,像之前的汇编代码那样做,会直接写越界。为了保证不会越界写,编译器就得一个变量一个变量地去写(对于上面的代码来说),也就是说,这里需要做三次读写。,而x86上的寄存器位宽最大就是8,因此我们只需要读写一次就可以完成。实际上,我们也可以要求C语言不做内存对齐的,将上面的。,根据内存对齐的知识,我们知道。是可以直接做赋值的,利用。

2022-09-22 19:44:45 482

原创 【C++04】C++对象构造和析构

Singleton(单例):在单例类的内部实现只生成一个实例,同时它提供一个静态的getInstance()工厂方法,让客户可以访问它的唯一实例;在单例类内部定义了一个Singleton类型的静态对象,作为外部共享的唯一实例。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。若不定义Person(const Person& p)这个拷贝构造函数,将会因为析构函数的释放而出错,因为默认的拷贝构造函数是浅拷贝。当其他类对象 作为本类成员,先构造其他类对象,再构造自身,析构的顺序和构造相反。

2022-09-21 21:42:38 748 1

原创 C语言经典编程习题集,助力你从入门到放弃

其中m和n是用户传入的参数,保证有m

2022-09-20 16:58:12 498

原创 从C语言基础到高级C语言 (结构体和位域)

1、struct{成员;成员;} x,y,z;2、struct 结构标记{结构成员;结构成员;}x,y,z;

2022-09-19 16:44:49 567

原创 vector底层实现及应用注意事项

STL 众多容器中,vector 是最常用的容器之一,其底层所采用的数据结构非常简单,就只是一段连续的线性内存空间(泛型的动态类型顺序表)。

2022-09-17 20:47:06 394

原创 C++多线程并发基础入门教程

线程:线程是操作系统能够进行CPU调度的最小单位,它被包含在进程之中,一个进程可包含单个或者多个线程。可以用多个线程去完成一个任务,也可以用多个进程去完成一个任务,它们的本质都相当于多个人去合伙完成一件事。多线程并发:多线程是实现并发(双核的真正并行或者单核机器的任务切换都叫并发)的一种手段,多线程并发即多个线程同时执行,一般而言,多线程并发就是把一个任务拆分为多个子任务,然后交由不同线程处理不同子任务,使得这多个子任务同时执行。

2022-09-16 19:01:38 1098 1

原创 C++多线程入门

std::async有三种启动选项:std::launch::async会创建一个线程,std::launch::deferred不创建线程,仅仅将函数的返回值包装为future,而std::launch::async | std::launch::deferred则自动选择,即根据目前的资源占用情况决定。这里先简单介绍一下线程的优势,线程和进程都是操作系统对资源调度的一种抽象,我们可以将线程视作一种轻量级的进程,一个进程中可以包含多个线程,而这些线程共享进程中的全部资源,比如堆栈、代码、全剧数据等等。

2022-09-13 22:42:08 1992

原创 C++ 虚函数优化探索简介

看了 C++ 的虚函数的一些文章,对于其性能消耗的优化思路整理了一下。

2022-09-12 15:48:33 698

原创 C++数组指针、函数指针、成员函数指针

假设类型T, 变量名称nameT* name;标识变量名字name, 它是T类型的指针。例如int n = 0;p_n是int指针类型, 指向某个int型的对象。数组指针定义先定义一个数组。int a[10];然后对数组里的名称用括号括起来后再在变量名称前面加个*号后面你会发现函数指针定义类似。// 各类定义对比// 指针数组, f是包含10个元素的数组, 数组里每一个元素的类型都是int*// 指针数组。另外一种定义方式。// 指针数组。另外一种定义方式。

2022-09-09 19:41:15 2334

原创 C++为什么提供move函数?

其实,代码的意思就是把vecRow里的数据放进mapTable,但是用上面的方法,白白的重新创建了一遍所有行数据,又把不再需要的vecRow释放掉了。我这个例子是vecRow后面不用了,但如果别人的程序里就是想复制一份vecRow保存到mapTable里,当前的vecRow他还想继续用,(比如全部vecRow里的字符串变成大写,再输出到另一个文件里),你就不能给人家直接move过去。另一种方式就是大家的黄金都存在银行里,张三买李四的黄金,无非就是账户里的黄金数发生个变化,实体黄金不移动,这样效率就高很多。

2022-09-08 21:49:44 299

原创 为什么说指针是 C 语言的精髓?

如上,其实可以看到这一个源文件中的所有变量和函数,可以看到许多不需要去链接的文件内局部变量,不过虽然不需要链接,但是由于静态变量的全局生命周期,因此也要记录这些变量,分配地址给它们。比如如上,重载一个类的运算符,可以使得对该类对象使用下标运算符[]时候实现对应的功能通过类的定义将其数据与操作都封装到对象内,此时想要通过指针的方法访问就不行(因为在内存上,不论此类的指针偏移数还是对象的指针指向与对象内数组的位置都不同,此种情况下不论如何都是无法直接使用指针运算符的)。如上,可以看到指针的基本用法。

2022-09-07 20:20:58 3567

原创 如何开始在 github 上学习东西?

优先看「star高」+「更新及时」的repo。比如我们点进第一个,就能看到Go教程了,很系统。那就直接检索 'Aho–Corasick',并且勾选语言为`Python`比较粗粒度,比如:想学习Go,那就直接检索 'go tutorial'比较细粒度,比如:我想看一下基于Python的AC自动机怎么写。甚至,我想学习怎么做饭都可以,直接检索‘cook’第一个点击进来就可以看到使用方法和源码了。恭喜你发现了一个宝藏网站!先明确自己想要学什么,

2022-09-05 18:55:14 783

原创 C++ 对 C 兼容是什么意思?

C++的ABI兼容是个让人头大的问题,这对于熟悉Java等跨平台语言的程序员来说兼职不可思议。了解ABI兼容有助于解决实际开发中程序编译和运行时的问题。

2022-09-03 16:04:37 1817

原创 C和指针——struct结构

C 语言没有其他语言的对象(object)和类(class)的概念,struct 结构很大程度上提供了对象和类的功能。下面是struct自定义数据类型的一个例子。声明了数据类型car和该类型的变量car。如果将 struct 变量传入函数,函数内部得到的是一个原始值的副本。上面示例中,函数happy()传入的是一个 struct 变量myTurtle,函数内部有一个自增操作。但是,执行完happy()以后,函数外部的age属性值根本没变。

2022-09-02 15:24:40 720

原创 零基础想自学编程,不知道学前端还是后端还是其他,也不知道学哪种编程语言?

7,提升解决问题的能力很重要,在我们学习代码中,最常见的就是遇到Bug不知道如何解决,我前面说了要有几位朋友能够带带你,但是在找朋友解决之前,先试着搜索解决,比如使用bing.com。14,尽可能的多的知识储备,因为目前的环境你作为HR应该也清楚不算好,比如我推荐的前端,很有可能会出现求职大于招聘的情况,多多储备自己的技能点,确保自己以后求职路的稳定性。4,对于前后端的选择,我的个人建议是,考虑先学前端,因为入门相对简单,成果相对能快速展现,能增强自己的信心。10,简历很重要,内推很重要;...

2022-09-01 16:30:49 216

原创 2022年了,学C++和python到底哪个值得?

除了以上详细介绍的三种发展方向,Python的发展方向还有很多,如人工智能、Python自动化测试、服务器运维......Python人才需求逐年增加,从市场整体需求来看,Python在招聘市场上的流行程度也在逐步上升,工资水平自然水涨船高。据统计,国内Python平均薪资水平在12K,随着经验的提升,薪资也是逐年增长。Python语法简单,语句简洁,使用方便,上手容易,而且不需要编译可以即使运行,尤其在Jupyter Notebook上运行,更加得心应手,所以才有“人生苦短,我用Python”之说。...

2022-08-31 15:21:58 6761 1

原创 你是怎么学好C++的?

最后,如果你想学或者正在学C/C++编程,可以加入小编的。如果你能在2-3年内精读完这些书,并全部融会贯通,那么你就明白什么是一览众山小的感觉了!编程学习C/C++企鹅圈。

2022-08-29 17:00:17 101

原创 为什么说 C 语言比 Java 难?

Java和C语言还有个明显的不同就是C语言注重的是算法,但是Java却不一样,想用的时候导包就可以了。要优于Java,因为Java必须运行在虚拟机的环境中,但是因为虚拟机,Java获得的平台无关性,而C语言的程序有可能需要重新修改编译才能实现平台的移植,另一方面,C语言比Java语言更“底层”,因此可以用C编写例如硬件的驱动,而Java却不行。针,这也说明了Java的健壮性,还有Java的多线程机制使程序可以并行运行,Java程序多用于网络。不如Java,C语言没有Java的垃圾回收机制,申请的空间要。..

2022-08-27 16:53:58 1189

原创 腾讯使用C++为主要开发语言?java少?为什么

在C++里,我们使用cout进行控制台文本输出。这在学习编程的阶段很常用,但在真实的工作场合却极少使用,毕竟大部分的应用程序都是基于图形界面,而不是终端的。甚至,在C/C++的某些应用场合,比如单片机编程里,嵌入式设备甚至连屏幕都没有。考虑到部分OJ系统中的在线编程题可能对输出格式作出精细要求,这里我们对cout控制输出进行“详细”讨论:包括cout的基本工作原理,以及通过cout进行精细格式输出的方法。

2022-08-25 15:47:11 524

原创 【学C的第N天】C语言知识新高度——结构体

为了定义结构体,您必须使用struct语句。{...是可选的,每个 member definition 是标准的变量定义,比如 int i;或者 float f;或者其他有效的变量定义。在结构定义的末尾,最后一个分号之前,您可以指定一个或多个结构变量,这是可选的。{} book;struct 位域结构名{ 位域列表 };其中位域列表的形式为:类型说明符 位域名: 位域长度struct bs{int a:8;int b:2;int c:6;};

2022-08-22 16:13:09 65

原创 C语言程序设计入门学习六步曲,六步带你入门C语言

喜欢此篇文章或觉得这篇文章对你有帮助的读者可以。

2022-08-05 18:48:56 2032

原创 C语言经典例题算法

利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?其乱码的具体原因是:输出的ASCII码被cmd以GBK编码输出了,176的16进制是B0,219的16进制是DB,0xB0DB是“佰”字的内码,所以输出的就是“佰”了。题目5:输入三个整数x,y,z,请把这三个数由小到大输出。题目6:用*号输出字母C的图案。.

2022-08-03 20:37:10 178

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除