随笔分类 -  程序语言基础

C/C++,python及其它编程语言的基础知识,高级技巧,易错点和难点
摘要:Lambda lambda表达式是C++11标准引入的新特性之一,它的名字来自于大名鼎鼎的$\lambda$演算。百度百科这样介绍: $\lambda$演算(英语:lambda calculus,LC)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义、函数如何被应用以及递归的 阅读全文
posted @ 2021-04-17 20:56 箐茗 阅读(1625) 评论(0) 推荐(2)
摘要:静态成员的初始化 静态成员——不能在类内初始化 在C++中,类的静态成员(static member)必须在类内声明,在类外初始化: class A { private: static int count ; // 类内声明 }; int A::count = 0 ; // 类外初始化,不必再加st 阅读全文
posted @ 2021-04-15 18:03 箐茗 阅读(1119) 评论(0) 推荐(0)
摘要:转载,原文出处:C++智能指针 原理、使用与实现。讲得清晰简洁,适合快速了解智能指针的基本原理。 智能指针的作用 C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的 阅读全文
posted @ 2021-04-15 16:33 箐茗 阅读(170) 评论(0) 推荐(0)
摘要:关键词 编译器优化,多线程并行,非临界区共享对象 volatile修饰符 volatile 类似于大家所熟知的const也是一个类型修饰符,用于指示编译器对它所修饰的对象不应该执行优化。多见于多线程编程中的“共享”环境中。 定义为volatile的变量是说这变量可能会被意想不到地改变,即在你程序运行 阅读全文
posted @ 2021-04-15 15:43 箐茗 阅读(580) 评论(0) 推荐(0)
摘要:C++中的类型转换分为:隐式类型转换和显式类型转换。 隐式类型转换 关于隐式转换原则,这篇文章中有详细讲解:混合运算中不同数据类型之间的转换原则(C语言),在此简略带过。 1) 算术转换(Arithmetic conversion) 在混合类型的算术表达式中, 最宽的数据类型成为目标转换类型。 in 阅读全文
posted @ 2021-04-15 13:39 箐茗 阅读(488) 评论(0) 推荐(0)
摘要:左值与右值 全文翻译自:https://eli.thegreenplace.net/2011/12/15/understanding-lvalues-and-rvalues-in-c-and-c 典型错误 //gcc int foo() {return 2;} int main() { foo() 阅读全文
posted @ 2021-04-15 13:38 箐茗 阅读(437) 评论(0) 推荐(0)
摘要:前言 网上关于C++对象模型的资料有很多,找到了两篇较为详实细致,理论与实践结合得较好,图文并茂的文章,在此做个总结转载,用以巩固与温故。(之所以是两篇,是因为这两篇内容大体一致,但出处却是两位作者,不知是谁原创,索性做个汇总。。。原文中存在多处错误或语义表述不清,已做修正补充) 图文和代码源自两处 阅读全文
posted @ 2021-04-15 13:37 箐茗 阅读(268) 评论(0) 推荐(0)
摘要:转载 这篇RTTI实现详解写得很好,转载备份,常温常新! 正文 在使用C++进行面向对象编程时,我们经常用到RTTI(Run Time Type Identification,运行时类型识别)。我们常常使用 typeid 判断某个对象的类型, dynamic_cast 动态转换对象的指针或引用类型。 阅读全文
posted @ 2021-04-15 13:35 箐茗 阅读(579) 评论(1) 推荐(0)
摘要:一句话总结 指针分配内存,有地址(编译器和程序员看来),属于一个类型变量,支持取地址与解引用操作。 引用分配内存,有地址(编译器看来),相当于一个变量别名,不支持取地址与解引用操作(即不可获取其本身地址),声明即必须初始化,不可变更引用对象,本质上是“pointer const”。 推荐阅读 快速理 阅读全文
posted @ 2021-04-15 13:34 箐茗 阅读(301) 评论(0) 推荐(0)
摘要:基础概念 机器码 一般书写表示的数叫做真值,真值在计算机中的表示方式叫做机器码。 计算机内存中整数是按照二进制补码进行存储的,浮点数在内存中按照科学计数法存储。 正整数的原码、反码、补码三种标识完全一样,而负整数用原码、反码、补码表示时,符号位都为1,用二进制表示的数值位却各不相同:原码符号位为1不 阅读全文
posted @ 2020-12-31 23:33 箐茗 阅读(1011) 评论(0) 推荐(0)
摘要:头文件<stdio.h> C标准库头文件 <stdio.h> 中定义了三个变量类型、一些宏和各种函数来执行输入和输出。 三个库变量 下面是头文件 <stdio.h> 中定义的变量类型: 序号变量 & 描述 1 size_t这是无符号整数类型,它是 sizeof 关键字的结果。 2 FILE这是一个适 阅读全文
posted @ 2020-12-30 12:56 箐茗 阅读(2443) 评论(0) 推荐(0)
摘要:INT_32的最小值 十进制表示为$-2147483648$,转化为二进制:$1000 0000 0000 0000 0000 0000 0000 0000$。 第一位$1$既是符号位,也是数值位:$-2_31 = 2,147,483,648$。 INT_32的最大值 十进制表示为$21474836 阅读全文
posted @ 2020-12-29 14:53 箐茗 阅读(4142) 评论(0) 推荐(1)
摘要:ASCII码表 信息在计算机上是用二进制表示的,这种表示法让人理解就很困难。因此计算机上都配有输入和输出设备,这些设备的主要目的就是,以一种人类可阅读的形式将信息在这些设备上显示出来供人阅读理解。为保证人类和设备,设备和计算机之间能进行正确的信息交换,人们编制了统一的信息交换代码,这就是ASCII码 阅读全文
posted @ 2020-12-28 18:18 箐茗 阅读(3492) 评论(0) 推荐(0)
摘要:理清概念 C++中的int*、int**、int&、int*&、int *a[]、int(*a)[]: int a; //a是一个int型【变量】 int *a; //a是一个指向int型变量的【指针】 int **a; //a是一个指向一个指向int型变量指针的指针,也就是【二级指针】 int & 阅读全文
posted @ 2020-12-28 17:23 箐茗 阅读(4179) 评论(0) 推荐(2)
摘要:头文件 C: <string.h> C++: <cstring> memset 函数原型 void *memset(void *s, int ch, size_t n); 功能 将s中当前位置后面的n个字节(typedef unsigned int size_t )用ch替换并返回s。 memset 阅读全文
posted @ 2020-12-28 14:12 箐茗 阅读(353) 评论(0) 推荐(0)
摘要:浮点数的存储方式与高精度 存储原理 科学计数法IEEE 754 待补充。。。 高精度计算中的误差与规避技巧 待补充。。。 PI的高精度表示方法 对精度要求较高的题目,一般PI的表示会需要高精度来确保结果的准确性。这时可以用 math.h 中的反三角函数来表示高精度的PI: PI = atan(1.0 阅读全文
posted @ 2020-12-28 11:24 箐茗 阅读(288) 评论(0) 推荐(0)
摘要:C语言的数据类型 c语言中,有关数据类型的分类,网上有很多种版本,未找到比较统一的标准,下图为我比较认可的划分: 常量的默认类型 在C语言中,数值常量分为两种:整数和小数。整数常量默认为有符号的 int 类型,而小数常量默认为 double 类型。字符常量被认为是一种特殊的整型常量,默认类型为有符号 阅读全文
posted @ 2020-12-10 20:34 箐茗 阅读(5634) 评论(0) 推荐(5)
摘要:大端和小端的定义 大端:数据的高位字节存放在低地址内,数据的低位字节存放在高地址内。 小端:数据的高位字节存放在高地址内,数据的低位字节存放在低地址内。 【热知识】 机器读取内存数据时,是从低位地址到高位地址进行读取。 一般来说,栈分配的方向是从高地址向低地址分配,但在变量内部地址是从低地址向高地址 阅读全文
posted @ 2020-11-29 16:58 箐茗 阅读(926) 评论(0) 推荐(0)
摘要:可变参数 可变参数即表示参数的个数可以变化,可多可少,也表示参数的类型也可以变化,可以是int,double还可以是char*,类,结构体等等。printf(),sprintf()等函数的实现就使用了可变参数,可变参数还可以用来对任意数量的数据进行求和、求平均值,非常方便(不然就用数组或每种写个重载 阅读全文
posted @ 2020-11-14 00:20 箐茗 阅读(1558) 评论(0) 推荐(1)
摘要:数组传参 数组作为参数传给函数时传的是指针而不是数组本身,那个指针存储的是数组的首地址,如:fun(char[8])和fun(char[])都等价于fun(char *)。 //在C++里参数传递数组永远都是传递指向数组首元素的指针,编译器不知道数组的大小。//如果想在函数内知道数组的大小, 可以在 阅读全文
posted @ 2020-11-13 16:14 箐茗 阅读(3621) 评论(0) 推荐(1)