编程知识
Python编程导师
Python编程导师
展开
-
自己动手制作C 语言编译器(8):表达式
这是整个编译器的最后一部分,解析表达式。什么是表达式?表达式是将各种语言要素的一个组合,用来求值。例如:函数调用、变量赋值、运算符运算等等。表达式的解析难点有二:一是运算符的优先级问题,二是如何将表达式编译成目标代码。我们就来逐一说明。运算符的优先级运算符的优先级决定了表达式的运算顺序,如在普通的四则运算中,乘法*优先级高于加法+,这就意味着表达式2 + 3 * 4的实际运行顺序是2 ...原创 2019-01-17 11:13:05 · 728 阅读 · 0 评论 -
C++11编程知识:右值引用
概述右值引用的概念有些读者可能会感到陌生,其实他和C++98/03中的左值引用有些类似,例如,c++98/03中的左值引用是这样的:int i = 0;int& j = i;这里的int&是对左值进行绑定(但是int&却不能绑定右值),相应的,对右值进行绑定的引用就是右值引用,他的语法是这样的A&&,通过双引号来表示绑定类型为A的右值。通...原创 2019-01-18 10:59:55 · 231 阅读 · 0 评论 -
C++中引用和匿名对象的理解和本质剖析
大家对C++的引用应该都不陌生吧,抱着既要知其然,也要知其所以然的态度。下面将按照是什么?怎么用?为什么需要?本质剖析的流程来向大家一一描述。引用是什么?引用其实就是给变量起的一个别名,使用这个别名跟使用变量名没有区别。那什么又是变量名呢?变量名实质上是一段连续存储空间的别名,是一个标号(门牌号),编译器通过变量来申请并命名内存空间,程序员可以通过变量的名字可以使用存储空间。也...原创 2019-01-24 16:18:53 · 481 阅读 · 0 评论 -
C++ 线程池实现原理
背景多线程编程是C++开发者的一个基本功, 但是很多开发者都是直接使用公司给包装好的线程池库, 没有去了解具体实现,有些实现也都因为高度优化而写得讳莫如深,让初学者看得吃力。所以写这篇文章主要是想以非常简单的方式讲讲实现原理, 希望初学者看完之后不是觉得「不明觉厉」,而是觉得「原来如此」。面朝代码首先先来一段超级简单(注释丰富)的代码展示多线程编程的经典写法。注: 该段代码和完...原创 2019-01-24 19:46:44 · 3074 阅读 · 0 评论 -
要是有了垃圾回收,还会不会发生内存泄漏?
问题的发现这个问题是我在写C++时考虑到的,C++需要手动管理内存,虽然现在标准库中提供了一些智能指针,可以实现基于引用计数的自动内存管理,但现实环境是很复杂的,我们仍要注意循环引用的问题。还有一个容易被忽视的问题就是对象间关系的“占有”和“非占有”,这个问题其实在具有GC的C#和Java中也一样存在。目前.NET和Java的GC策略都属于Tracing garbage collectio...原创 2019-01-24 20:38:20 · 244 阅读 · 0 评论 -
C++的泛型编程
代码膨胀C++ 的泛型编程是基于模板实现的,而 C++ 的模板采用的是代码膨胀技术。例如 std::list 容器,如果你将 int 类型的数据存进去,C++ 编译器就为你生成一个专门用来存 int 类型数据的列表数据结构。也就是说,你向 std::list 容器中存放什么类型,C++ 编译器就为你生成相应的列表数据结构。理论上,数据的类型是无限的,因此 C++ 要生成的列表数据结构也是无限的。...原创 2019-01-20 19:45:08 · 3251 阅读 · 0 评论 -
宏语言为何不受欢迎?
人类用计算机处理文本主要是依赖宏语言以及一些专用的文本编辑器。事实上,早期的文本编辑器只提供基本的文本编辑功能,然后借助宏语言进行功能扩展。结果人类很快就发现,基于宏扩展的编辑器,功能越复杂,它的行为就越诡异。于是,文本编辑器的扩展语言很快就被换成了当时的一种通用的动态类型的函数式编程语言——Lisp。实际上,这就是 Emacs 的前世与今生。研究编程语言设计的人,所追求的目标是,怎样定义一套文...原创 2019-01-21 10:36:16 · 230 阅读 · 0 评论 -
ProtoBuf 反射详解
Protocol Buffer 简称 ProtoBuf,是用于结构化数据串行化的灵活、高效、自动的方法,又如 XML,不过它更小、更快、也更简单。你可以定义自己的数据结构,然后使用代码生成器生成的代码来读写这个数据结构。你甚至可以在无需重新部署程序的情况下更新数据结构。本文主要介绍 protobuf 里的反射功能,使用的pb版本为2.6.1,同时为了简洁,对 repeated/extensio...原创 2019-01-25 20:20:32 · 2045 阅读 · 0 评论 -
程序员是否有义务做好代码的注释?你做好代码注释了吗?
关于编程,代码注释是一个很重要的部分,从某种程度上,代码注释也反应了一个程序员的专业素养,下面我们就来聊聊程序员和代码注释的那些事。一些典型的场景场景一:某天,一个程序员因为一些事情感到心理很委屈,于是他决定,以后写代码的时候,我尽量将注释写得模棱两可,写得简单些。场景二:某天,一个程序员因为工作分配不均,然后他决定,尽可能的少写注释或者文档。两种常见的注释//和/**...原创 2019-01-25 20:21:51 · 215 阅读 · 0 评论 -
学会了C语言/C++能做什么?我们一起来看看吧!
大部分初学者都在想!!学会了C/C++能做什么程序员,今天我就来告诉大家!服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频开发工程师、游戏服务器、分布式系统、游戏辅助等!这就是我们的答案,,不知道其中有没有各位想去发展的方向呢!有兴趣学习交流C语言C++编程的伙伴可加群:941 636 0...原创 2019-01-25 20:25:04 · 4404 阅读 · 0 评论 -
为什么我说C语言是最好的游戏开发语言!
我需要的开发语言是什么样的?有些要求是没有商量余地的。首先,它必须是可靠的。我不能接受把时间浪费在处理那些不是我引起的bug上。过去我开发的很多游戏都是基于flash的,现在flash技术已经离寿终正寝不远了。我不想花费时间将老游戏移植到新的平台上,我想开发新的游戏。我需要找一个我有信心它能存在很长一段时间的平台。同样我不希望把自己绑定在一个特定的操作系统上,我理想 的操作系统最好有开...原创 2019-01-21 15:09:46 · 778 阅读 · 0 评论 -
自己动手制作C 语言编译器(2):虚拟机
本章我们要构建一台虚拟的电脑,设计我们自己的指令集,运行我们的指令集,说得通俗一点就是自己实现一套汇编语言。它们将作为我们的编译器最终输出的目标代码。计算机的内部工作原理我们关心计算机的三个基本部件:CPU、寄存器及内存。代码(汇编指令)以二进制的形式保存在内存中,CPU 从中一条条地加载指令执行。程序运行的状态保存在寄存器中。内存我们从内存开始说起。现代的操作系统都不直接使用内存...原创 2019-01-15 20:30:35 · 1255 阅读 · 0 评论 -
C++11带来的优雅语法
自动类型推导 autoauto的自动类型推导,用于从初始化表达式中推断出变量的数据类型。通过auto的自动类型推导,可以简化我们的编程工作;auto是在编译时对变量进行了类型推导,所以不会对程序的运行效率造成不良影响;另外,似乎auto也并不会影响编译速度,因为编译时本来也要右侧推导然后判断与左侧是否匹配。auto a; // 错误,auto是通过初始化表达式进⾏类型推导,如果没有...原创 2019-01-22 11:28:19 · 352 阅读 · 0 评论 -
C++(11)在时空性能方面的改进
主要包括以下方面:1.新增的高效容器:array、forward_list以及unordered containers;2.以及常量表达式、静态断言和move语义;大小固定容器 arraystd::array是一个支持随机访问且大小(size)固定的容器,它是c++11中新增的容器。它有如下特点:不预留多余空间,只分配必须空间(译注:size() == capacity())。...原创 2019-01-22 13:47:30 · 238 阅读 · 0 评论 -
C++11中对类(class)新增的特性
突然发现以前的一篇老文default/delete 控制默认函数在我们没有显式定义类的复制构造函数和赋值操作符的情况下,编译器会为我们生成默认的这两个函数:默认的赋值函数以内存复制的形式完成对象的复制。这种机制可以为我们节省很多编写复制构造函数和赋值操作符的时间,但是在某些情况下,比如我们不希望对象被复制,在之前我们需要将复制构造函数和赋值操作符声明为private,现在可以使用del...原创 2019-01-22 18:54:27 · 192 阅读 · 0 评论 -
Linux 中的线程局部存储(2)
《Linux 中的线程局部存储(1)》提到了一种,其实在Linux中还有一种更为高效的线程局部存储方法,就是使用关键字__thread来定义变量。__thread是GCC内置的线程局部存储设施(Thread-Local Storage),它的实现非常高效,与pthread_key_t向比较更为快速,其存储性能可以与全局变量相媲美,而且使用方式也更为简单。创建线程局部变量只需简单的在全局或者静态...原创 2019-02-14 16:20:42 · 202 阅读 · 0 评论 -
c#编程知识:高效使用STL
高效使用STL仅仅是个选择的问题,都是STL,可能写出来的效率相差几倍;熟悉以下条款,高效的使用STL;当对象很大时,建立指针的容器而不是对象的容器1)STL基于拷贝的方式的来工作,任何需要放入STL中的元素,都会被复制;这也好理解,STL工作的容器是在堆内开辟的一块新空间,而我们自己的变量一般存放在函数栈或另一块堆空间中;为了能够完全控制STL自己的元素,为了能在自己的地盘随...原创 2019-01-23 11:20:04 · 965 阅读 · 1 评论 -
常用的 STL 查找算法
常用的 STL 查找算法《effective STL》中有句忠告,尽量用算法替代手写循环;查找少不了循环遍历,在这里总结下常用的STL查找算法;查找有三种,即点线面:(1)点就是查找目标为单个元素;(2)线就是查找目标为区间;(3)面就是查找目标为集合;针对每个类别的查找,默认的比较函数是相等,为了满足更丰富的需求,算法也都提供了自定义比较函数的版本;单个元素查找f...原创 2019-01-23 13:01:55 · 293 阅读 · 0 评论 -
C语言编程: 函数调用中堆栈的个人理解
接下来将通过下面几个问题解析函数调用中对堆栈理解:(1)函数调用过程中堆栈在内存中存放的结构如何?(2)汇编语言中call,ret,leave等具体操作时如何?(3)linux中任务的堆栈,数据存放是如何?1. 函数调用过程中堆栈在内存中存放的结构如何?计算机,嵌入式设备,智能设备等其实都是有软件和硬件两部分组成,具体实现也许复杂,但整体的结构也就如此。软件运行在硬件上,告诉硬...原创 2019-01-23 13:11:44 · 485 阅读 · 0 评论 -
一个例子记住C++对象的生存周期
代码代码说明:类A,含构造函数和析构函数普通函数fun,函数体里新建了类A的局部自动对象FunObj和局部静态对象InStaObjmain方法新建了类A的局部自动对象MainObj,调用fun方法外面新建了A的的外部静态对象ExStaObj和外部对象GblObj#include <iostream>#include <string.h>us...原创 2019-01-23 15:35:39 · 197 阅读 · 0 评论 -
C++11 新特性之容器相关特性
这是C++11新特性介绍的第四部分,涉及到C++11这次更新中与容器有关的新特性。有兴趣阅读其他部分的可以关注我主页找到该文章。不想细看的读者可以直接拉到文章最后看这部分的总结。cbegin和cend原来的begin和end返回的iterator是否是常量取决于对应的容器类型,但是有时,即使容器不是常量类型,我们也希望获得一个const_iterator,以避免不必要的修改行为。C++...原创 2019-02-21 15:41:17 · 160 阅读 · 0 评论 -
C++11 新特性之智能指针
这是C++11新特性介绍的第五部分,涉及到智能指针的相关内容(shared_ptr, unique_ptr, weak_ptr)。当然笔者以前也写过关于c++智能指针部分的知识总结,这次的话是讲到c++11的特性,再次总结一下。不想看toy code的读者可以直接拉到文章最后看这部分的总结。shared_ptrshared_ptr 基本用法shared_ptr采用引用计数的方式管理...原创 2019-02-21 18:52:09 · 273 阅读 · 0 评论 -
C++11 中的 Defaulted 函数
对于 defaulted 函数,编译器会为其自动生成默认的函数定义体,从而获得更高的代码执行效率,也可免除程序员手动定义该函数的工作量。Defaulted 函数背景问题C++ 的类有四类特殊成员函数,它们分别是:默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。这些类的特殊成员函数负责创建、初始化、销毁,或者拷贝类的对象。如果程序员没有显式地为一个类定义某个特殊成员函数,而又需要...原创 2019-02-18 14:25:59 · 193 阅读 · 0 评论 -
C++ 11 新特性之右值引用与移动
继续奉上c++11新特性部分,这是C++11新特性介绍的第七部分,涉及到左右值引用、移动构造、移动赋值、完美转发等。不想看细看的读者可以直接拉到文章最后看这部分的总结。右值引用右值是一个行将销毁的值,例如(i * 10)这种表达式的值。新标准中允许通过&&标识定义一个右值引用,将其绑定到一个右值上。但是,一个右值引用变量又是一个左值,因为它是一个变量了嘛。std:...原创 2019-02-23 15:29:25 · 231 阅读 · 0 评论 -
教你成为更优秀的程序员:如何阅读源代码!
阅读源代码有许多益处。你会发现新的架构(construct)和库,与其他的代码维护者产生共鸣,但最重要的是学会如何组织代码,避免因内部极其复杂而变得不可维护。阅读源代码有许多益处。你会发现新的架构(construct)和库,与其他的代码维护者产生共鸣,但最重要的是学会如何组织代码,避免因内部极其复杂而变得不可维护。但是也有一个不好的地方,那就是阅读源代码太困难了。每当我看到一个新的代码...原创 2019-02-13 15:14:23 · 405 阅读 · 0 评论 -
初学程序员如何才能快速提高自己的技术!
初级程序员如何才能快速提高自己的技术,为什么要写这篇文章呢,因为有很多程序员给我留言,说我们这些初入社会,走向工作的程序员怎样才能做的更好,怎样才能更快的适应工作?还有很多初学者问我,怎样才能更好的学习这项技术?能不能写篇这方面的文章,所以才有了今天的主题。这里很明确,主体是两种人,0是初学者,1是刚刚走上工作岗位的程序员。那我就分别来讲讲吧,不一定适合所有人,也就是我的个人经验罢了。...原创 2019-02-13 15:45:46 · 226 阅读 · 0 评论 -
Navicat数据库管理工具,为什么如此受程序员青睐?
摘要:Navicat是一套快速、可靠和全面的数据库管理工具,专门用于简化数据库管理和降低管理成本。Navicat图形界面直观,提供简便的管理方法,设计和操作MySQL、MariaDB、SQL Server、Oracle、PostgreSQL和SQLite的数据。Navicat是一套快速、可靠和全面的数据库管理工具,专门用于简化数据库管理和降低管理成本。Navicat图形界面直观,提供简便的管...原创 2019-02-13 15:48:58 · 1392 阅读 · 0 评论 -
程序员怒怼外包公司HR:1万还想招C语言开发,是不是想多了
前言:程序员在求职时碰到了一家外包公司,招C语言开发,然而工资只给8千到1万,于是乎开始怒怼起来,小编C++学习群825414254获取C/C++数十套PDF以及更多学习资料哦!对于外包公司大家应该都不陌生,简而言之就是第三方劳务公司,相当于人力中介,中间贩子的角色,在所有的外包公司中,尤以程序员外包最多最广。随着互联网行业的大热,外包程序员的工资也水涨船高,基本都是上万的月薪。有一名程序员在...转载 2019-02-28 16:50:14 · 521 阅读 · 0 评论 -
程序员的工龄vs发量!刚实习的小伙,你要挺住!
程序员这个工作想必大家都非常的熟悉,高薪确实是一部分,一些好厉害的程序员,薪资方面是非常可观的,但是很多女生都不愿意跟程序员谈恋爱,这到底是为什么呢?其实程序员脱发这件事情大家早就有目共睹,今天小编就带大家来看一下不同年龄段的程序员,他们的发型是怎么变化的?小编的C/C++学习群825414254获取C/C++数十套pdf资料还有一套完整的项目实战资料哦!首先这位小姐也找了一个年轻,...转载 2019-02-28 20:17:55 · 697 阅读 · 0 评论 -
应届程序员面试要8K被HR嘲讽,网友:难道8k很多吗?
现在的程序员可是一个高薪职业,很多程序员的月薪都破万了,甚至其中的佼佼者年薪百万都不是梦,但是具体的薪资待遇还是要看你的技术是否过关,技术好什么都好说,但是技术不达标,那么通过企业的面试都难,更别说什么高薪了!小编的C/C++学习群825414254获取C/C++数十套pdf资料还有一套完整的项目实战资料哦! 有一位程序员大学学的IOS开发,在毕业之后去面试,碰到了这样的情况: ...转载 2019-02-28 20:43:57 · 1131 阅读 · 0 评论 -
程序员吐槽:凭什么产品经理工资比我高?网友评论炸了!
在我们 IT 界,程序员和产品经理简直就是一对冤家。在工作上天天互怼,互相不服气。其实导致这种现象出现的原因就是:产品经理把程序员当民工,程序员把产品经理当 SB,其实是互相不了解罢了。小编c++学习群825414254获取c++一整套系统性的学习资料还有数十套pdf在论坛中,一名程序员就留言吐槽产品经理:产品经理的工作为什么要比设计师的高呢?设计师最起码还能有一些专业的技能,可以施展,而...原创 2019-03-05 20:13:22 · 1442 阅读 · 1 评论 -
推荐几个C/C++项目,小白练手最适合!
最好的编程语言是什么?一千个程序员或许会有一千零一种答案:这是小编准备的C++学习资料,加小编学习群:825414254,加群即可获取哦!Python在人工智能时代的风头正盛、Java依旧是市场上的香饽饽、当然还有PHP;JavaScript、C#、Ruby以及Objective-C……每一种编程语言,都有由其打造的顶级应用成果呈现。根据TIOBE 刚刚发布了 5 月编程语...原创 2019-03-09 22:34:46 · 4085 阅读 · 1 评论 -
小姐姐C语言C++编写迷宫游戏,获得一致好评!
程序是在VC++6.0中写的,新建一个Win32 Application即可。最初觉得程序的关键应该是求解迷宫,后来发现求解迷宫很简单,难点是如何生成迷宫。 这里采用接合图的深度优先遍历,生成迷宫的算法,定义了搜索步长以便控制迷宫分支多少和分支深度。 由于程序中多处用到链表,所以对于迷宫求解部分也是用链表,没有用栈。下面是小编整理好的一套C/C++资料,加小编C/C++学习群82541425...原创 2019-03-14 21:19:33 · 515 阅读 · 0 评论 -
8年C++开发经验多强?10分钟C++实现打砖块小游戏!
天,没救的教材,今日居然有人问我 EasyX 怎么写游戏这一看就知道是上个世纪的教材,我就想问,就不能更新一下么好了不多说开始写代码下面是小编整理好的一套C/C++资料,加小编C/C++学习群:825414254,获取系统性学习C/C++的学习资料60帧速关闭画图结束效果首先实现的是砖块类唔,没什么要说,无非就是保存坐标、大小和颜色,其他的可以无视,毕竟我要做的只是一个简...原创 2019-03-14 22:13:52 · 1460 阅读 · 1 评论 -
深入理解C++中的类型转换,小白也能成老鸟!
在C/C++语言中,类型转换是一个绕不开的话题,所谓类型转换,其含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式。C++提供了多种类型转换的方式,下面将分别讲解。这是小编准备的C++学习资料,加小编学习群:825414254,加群即可获取哦!旧式类型转换旧式类型转换其实就是C风格转换,是从C语言中继承下来的,比如,为了转换一个类型为doubole的浮点数的指针到整型:或者...原创 2019-03-10 20:30:03 · 293 阅读 · 0 评论 -
让人绝望的C语言恶搞小程序,网友:生无可恋!
今天给大家介绍两个好东西,就是利用C语言编写的两个恶搞小程序,有多厉害,只有你自己去试试了,下面是小编整理好的一套C/C++资料,加小编C/C++编程学习群:825414254,获取系统性学习C/C++的学习资料反正我是害怕,惹不起。利用C语言+API写的两个恶作剧程序,我在这里说,你没感觉,你的朋友同学试过之后可能就会有某些冲动了。NO.1恶作剧一:鼠标乱抖:源码:请注意合理使用!...原创 2019-03-19 19:03:49 · 4188 阅读 · 2 评论 -
从零开始学C语言,200行代码完成一个打字母游戏!
很多刚开始学习编程的同学都希望自己可以去开发一些游戏,当学习了c语言的时候却发现总是用c语言去解决一些数学问题,今天我就分享给大家一个我学习c语言时候学到的一些好玩的东西,希望可以帮助大家保持对编程的兴趣。下面是小编整理好的一套C/C++资料,加小编C/C++编程学习群:825414254,获取系统性学习C/C++的学习资料今天来做的游戏叫做简易打字母游戏,你可能使用c语言写过一些推箱子或...原创 2019-03-19 20:12:33 · 1893 阅读 · 1 评论 -
C语言编程练手必备,C 语言快速实现五子棋!
五子棋大家一定都玩过,想不想试着用 C 语言来实现一个简易版的五子棋呢?下面就让我们现在开始,用最简单易懂的代码来编写一个控制台下的五子棋,并逐步完善它,每个人都能轻松学会哦!下面是小编整理好的一套C/C++资料,加小编C/C++编程学习群:825414254,获取系统性学习C/C++的学习资料知识点游戏的逻辑判断结果的算法界面的设计实验环境vim编辑器Xfce终端gcc编译...原创 2019-03-19 20:33:16 · 1454 阅读 · 0 评论 -
骨灰级C++程序员!教你象棋人工智能算法的C++实现(三)
前言:上一期博客我们介绍了相对简单的士、兵、相、马的走棋算法,本期博客将重点介绍比较复杂的车、炮和将的走棋算法。下面是小编整理好的C/C++学习资料,加入小编学习C/C++学习群(825414254)获取一整套系统性学习C/C++的教程!1.车的走棋算法车的走棋规则:沿直线行走。上canMoveCHE函数的源代码:算法解析:看到这里读者可能会有点懵圈,咦?不是说车的走棋算法是比较复...原创 2019-03-11 21:05:31 · 778 阅读 · 0 评论 -
C++开启人工智能的开端,象棋人工智能算法的C++实现(四)
前面几篇文章详细介绍了棋盘类的封装、棋子类的封装以及各种类型的棋子的走棋算法的实现。有了前面的铺垫,就能迈出人工智能的第一步了。本系列博客还是重点介绍实现方法,很多的代码都不再过多解释了。下面是我整理好的C/C++学习资料,加小编C/C++学习群(825414254)获取一套系统性的学习C/C++教程哦!人机对战类:由以上代码可以看出,人机对战类继承自棋盘类,重载了棋盘类中的click函...原创 2019-03-11 21:25:11 · 599 阅读 · 0 评论