Learning Path
浏览 开发笔记 相关教程与章节。
社区笔记、经验文章、测验题库与零散教程入口。
教程
1237
C 语言标准(C89) 没有定义布尔类型,如果你使用 true 和 false,会出现以下错误: infinite.c:5:12: error: use of undeclared identifier 'true' while (true) { 1 error generated. make: *** [infinite] Error 1 我们可以借助 C 语言的宏定义来哦设置: [mycode3..
1. 什么是回调函数? 回调函数,光听名字就比普通函数要高大上一些,那到底什么是回调函数呢?恕我读得书少,没有在那本书上看到关于回调函数的定义。我在百度上搜了一下,发现众说纷纭,有很大一部分都是使用类似这么一个场景来说明:A君去B君店里买东西,恰好缺货,A君留下号码给B君,有货时通知A君。感觉这个让人更容易想到的是异步操作,而不是回调。另外还有两句英文让我印象深刻:1) If you call me, I will call you b..
先初步了解引用、指针的一些注意事项。 引用并非对象 引用必须初始化 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起 类型要严格匹配 int &a = 10; //错误:引用类型的初始值必须是一个对象 double a = 3.14; int &b = a; //错误:此处引用类型的初始值必须是int型对象 指针本身就是对象 指针..
在实际的编程中,往往会发生这种情况,即所需的内存空间取决于实际输入的数据,而无法预先确定。对于这种问题,用静态数组的办法很难解决。为了解决上述问题,C语言提供了一些内存管理函数,这些内存管理函数结合指针可以按需要动态地分配内存空间,来构建动态数组,也可把不再使用的空间回收待用,为有效地利用内存资源提供了手段。 动态数组,是相对于静态数组而言。静态数组的长度是预先定义好的,在整个程序中,一旦给定大小后就无法改变。而动态数组则不然,它可以..
泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。在 C 语言中,可以通过一些手段实现这样的泛型编程。这里介绍一种方法——通过无类型指针 void*。 看下面的一个实现交换两个元素内容的函数 swap,以整型 int 为例: void swap(int* i1,int* i2){ int temp; temp = *i1; *i..
Windows 系统下的 vs 中可以使用 _kbhit() 函数来获取键盘事件,使用时需要加入 conio.h 头文件,例: 实例 [mycode3 type='cpp'] #include #include using namespace std; int main() { int ch; while (1){ if (_kbhit()){//如果有按键按下,则_kbh..
一、简述 C 语言中整数与字符串的相互转换,有广泛应用的拓展函数(非标准库),也可以自己尝试简单的实现。 二、整数转字符串 1、拓展函数 itoa itoa (表示 integer to alphanumeric)是把整型数转换成字符串的一个函数。 windows 环境下,在 <stdlib.h> 头文件中有: char* itoa(int value,char*string,int radix);..
本文中,我对指针总结的维度,用四个字来概括,就是:“两己三他”!是不是读起来一点都不顺口,一点都不押韵啊,什么个玩意儿。这“两己三他”,展开来说,就是:己址、己值、他值、他址、他型。 我觉得可以从这5个维度再来聊聊指针。不过在聊之前,我写了个程序,把指针的“两己三他”维度都包含进来,然后再来一个一个解释每个维度的意思,你看看是不是这回事儿。 在大部分的使用指针的场景下,这5个维度应该足够帮你去理解了。不过在一些使用指针特殊的场景下,..
描述 给定一个 5*5 的矩阵(数学上,一个 r×c 的矩阵是一个由 r 行 c 列元素排列成的矩形阵列),将第 n 行和第 m 行交换,输出交换后的结果。 输入输入共 6 行,前 5 行为矩阵的每一行元素, 元素与元素之间以一个空格分开。 第 6 行包含两个整数 m、n,以一个空格分开。(1 <= m,n <= 5)输出输出交换之后的矩阵,矩阵的每一行元素占一行,元素之间以一个空格分开。样例输入: 1 2..
前言:复杂类型说明 要了解指针, 多多少少会出现一些比较复杂的类型,所以我先介绍一下如何完全理解一个复杂类型,要理解复杂类型其实很简单, 一个类型里会出现很多运算符,他们也像普通的表达式一样, 有优先级, 其优先级和运算优先级一样, 所以我总结了一下其原则: 从变量名处起, 根据运算符优先级结合, 一步一步分析。下面让我们先从简单的类型开始慢慢分析吧: int p; -- 这是一个普通的整型变量 int *p; -- 首先..
魔方阵说明: 魔方阵是一个N*N的矩阵;该矩阵每一行,每一列,对角线之和都相等; 魔方阵示例: 三阶魔方阵: 8 1 6 3 5 7 4 9 2 每一行之和:8+1+6=15;3+5+7=15;4+9+2=15;每一列之和:8+3+4=15; 1+5+9=15; 6+7+2=15;对角线之和:8+5+2=15; 6+5+4=15; 魔方阵计算规律(行,列以1开始): 1.将“1”放在第一行,中间一列;..
fwrite 和 fread 是以记录为单位的 I/O 函数,fread 和 fwrite 函数一般用于二进制文件的输入输出。 #include size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); 返回值:..
今天看了《C陷阱与缺陷》中对 '' 与 '' 的描述,'' 引起的一个字符代表一个整数,整数值对应于该字符在编译器采用的字符集中的序列值。 '' 引起的字符串代表的是一个指向无名数组起始字符的指针。对这两个符号产生了兴趣,遂打开 VS2010 查看了单引号、双引号引起的字符在内存中的存储形式。 实验方式很简单,分别查看 'yes'/&#..
sizeof() 和 strlen() 在 C 语言中两个非常常用,它们都与计算内存大小有关,但是它们的作用是不同的。 sizeof() 和 strlen() 的主要区别在于: sizeof() 是一个运算符,而 strlen() 是一个函数。sizeof() 计算的是变量或类型所占用的内存字节数,而 strlen() 计算的是字符串中字符的个数。sizeof() 可以用于任何类型的数据,而 strlen() 只能用于以空字符 �..
在 C 语言中,static 的字面意思很容易把我们导入歧途,其实它的作用有三条。 (1)先来介绍它的第一条也是最重要的一条:隐藏。 当我们同时编译多个文件时,所有未加 static 前缀的全局变量和函数都具有全局可见性。为理解这句话,我举例来说明。我们要同时编译两个源文件,一个是 a.c,另一个是 main.c。 下面是 a.c 的内容: a.c 文件代码 [mycode4 type='cpp'] char..
1、概述 C 语言允许用户自己指定这样一种数据结构,它由不同类型的数据组合成一个整体,以便引用,这些组合在一个整体中的数据是互相联系的,这样的数据结构称为结构体,它相当于其它高级语言中记录。 声明一个结构休类型的一般形式如下: struct 结构体名 {成员列表}; 结构体名,用作结构体类型的标志,它又称 结构体标记,大括号内是该结构体中的各个成员,由它们组成一个结构体,对各成员都应进行类型声明如: 类型名 成员名; 也可以成员列表..
异或运算可以达到交换两数的目的,代码如下: void swap(int &a, int &b) { a = a^b; b = a^b; a = a^b; } 但不推荐使用这种方式,附上常用的临时变量方法对比说明。 临时变量方法: void swap(int &a, int &b) { int tmp = a; a = b; b = tmp; } 对..
模板是C++支持参数化多态的工具,使用模板可以使用户为类或者函数声明一种一般模式,使得类中的某些数据成员或者成员函数的参数、返回值取得任意类型。 模板是一种对类型进行参数化的工具; 通常有两种形式:函数模板和类模板; 函数模板针对仅参数类型不同的函数; 类模板针对仅数据成员和成员函数类型不同的类。 使用模板的目的就是能够让程序员编写与类型无关的代码。比如编写了一个交换两个整型int 类型的swap函数,这个函数就只能实现int 型,对d..
首先结构体做函数参数有三种传递方式: 一是传递结构体变量,这是值传递,二是传递结构体指针,这是地址传递,三是传递结构体成员,当然这也分为值传递和地址传递。 以传引用调用方式传递结构比用传值方式传递结构效率高。以传值方式传递结构需要对整个结构做一份拷贝。 下面看一个列子,student结构体中包含该学生的各种信息,我们在change函数中对其进行部分修改,再在主函数中输出其结果 1.下面传递结构体变量 #include #in..
编程中经常用到时间表达及转换的函数,它们都定义在 time.h 库函数中,在此做一下总结,以方便后续查看使用。 几个时间概念: 1:Coordinated Universal Time(UTC): 协调世界时,又称世界标准时间,也即格林威治标准时间(Greenwich Mean Time,GMT),中国内地的时间与UTC得时差为+8,也即UTC+8,美国为UTC-5。 2:Calendar Time: 日历时间,是用“从一个标准..
void 在英文中作为名词的解释为 “空虚、空间、空隙”,而在 C 语言中,void 被翻译为“无类型”,相应的void * 为“无类型指针”。 void 似乎只有“注释”和限制程序的作用,当然,这里的“注释”不是为我们人提供注释,而是为编译器提供一种所谓的注释。 void 的作用 1.对函数返回的限定,这种情况我们比较常见。 2.对函数参数的限定,这种情况也是比较常见的。 一般我们常见的就是这两种情况: 当函数不需要返回值值..
1、为什么用volatile? C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 'The C++ Programming Language' 对 volatile 修饰词的说明: A volatile specifier is a hint to a compiler that an object may ch..
while 和 do while 都是 C 语言中的循环语句,它们的主要区别在于循环体执行的顺序。 while 循环首先检查循环条件,只有当条件为真时才执行循环体。因此,如果条件一开始就为假,那么循环体将永远不会执行。而如果条件一直为真,那么循环将一直执行下去。 while: 你欠我钱,我走路上,前面一人,我先看清楚这个人是不是你,不是就不打。 do while: 你欠我钱,我走路上,前面一人,我不管这个人是不是你,先打再说。 ..
本文技术要点 取快链?你想说的是区块链吧? 要说清楚区块链,我们先来讲个故事。 你一定听说过三人成虎的故事吧? 假设一个人告诉你,不好了,大街上有只老虎,你相不相信? 我去,你咋不按常理出牌啊,你要说不相信! 重来!我们说的是真老虎! 好!非常好!!影帝级的演出!!! 继续,这时候换做一堆人告诉你这件事! 我们再换一种场景。 如果一个德高望重、你十分信任的老者告诉你这件事,你又会怎么想? 是..