最近打算巩固计算机基础知识,网上一本评价极高的教材——深入理解计算机系统,下面要将讲的内容来自第一章一个小例子,不过对我们了解C语言如何从源程序到最终的可执行程序很有帮助,下面让我们开始吧。 一步到位的hello world 首先一个简单的C语言版本的hello world例子,保存在文件hello.c中。 #include <stdio.h> int main() { printf("hello world\n"); } 一般而言,我们通常可以使用gcc命令将其转化为可执行程序 gcc -o hell…

2020年9月7日 0条评论 54点热度 阅读全文

在计算机领域,堆栈是一个不容忽视的概念,但是很多人甚至是计算机专业的人也没有明确堆栈其实是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。 要点:堆,顺序随意。栈,后进先出(Last-In/First-Out)。 两种“堆栈”的对比 堆(从操作系统角度) 一般由程序员分配释放,若程序员不释放,程序结束时可能由操作系统回收,分配方式类似 于链表。堆存放在二级缓存中,生命周期由虚拟机的垃圾回收算法决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度…

2020年8月30日 0条评论 31点热度 阅读全文

0x00 前言 我在生活和工作中常常会遇到一些十分迷信机器的人,他们之中很多人都相信机器是最理智的,没有任何感情,是真正的铁面无私,因此机器的运算所给出的答案总是正确的,如果答案错误,那么一定是操作机器的人的问题。但机器的运算就一定是正确的吗?事实上,机器出现运算错误并不是一个罕见的情况,一个典型的例子便是小数运算。下面就让我们来聊一个相关的话题,在机器或者具体的说在C#语言中小数是如何被处理的? 0x01 先从一个“错误”的答案说起 既然要聊一聊机器是怎么把算术题做错的,那么我们自然要先来看一个机器运算错误的小例…

2020年8月23日 0条评论 38点热度 阅读全文

摘要 memset()一般是对字符型数组赋初值,如果非要对整型数组赋初值,只能赋值0.原因是memset()是设置每一个“字节”的值。 问题 用memset将二维整型数组全部设置为最大整型时遇到的问题及解决办法 #define MAX 100000 const int MAXN = 5; int len[MAXN][MAXN]; memset(len,MAX,sizeof(len));//失败,并不能让len数组所有的值是100000,而是-1600085856 memset(len,-1,sizeof(len))…

2020年8月8日 0条评论 37点热度 阅读全文

1. OpenResty 是什么,适合什么场景下使用 和大部分知名开源软件诞生在欧美国家不同,OpenResty 自身和依赖的主要组件都是金砖国家的开发者发明的,这点还挺有意思。 Nginx 是俄罗斯人发明的, Lua 是巴西几个教授发明的,中国人章亦春把 LuaJIT VM 嵌入到 Nginx 中,实现了 OpenResty 这个高性能服务端解决方案。 通过 OpenResty,你可以把 nginx 的各种功能进行自由拼接, 更重要的是,开发门槛并不高,这一切都是用强大轻巧的 Lua 语言来操控。 它主要的使用场…

2020年7月31日 0条评论 35点热度 阅读全文

C语言介绍 C的开发流程 C 是一种编译型语言,所谓编译型语言是指在程序运行之前,需要先经过编译和链接过程: 编辑源文件(获得源文件) 编译源文件(获得目标文件) 链接目标文件及库文件(获得可执行文件) 运行程序(获得运行结果) 对变量定义的理解 比如: int i; 定义一个变量的过程实际上是向内存申请一个符合这个变量的数据类型的存储单元的过程,因此可以认为变量的实质就是内存中某一个单元的格式符,对这个格式符的引用就相当于对相应的内存单元的读取操作 字符数组和字符串 用来存放字符型数据的数组称为字符数组。字符数组…

2020年7月29日 0条评论 34点热度 阅读全文

C/C++中的字符串、字符数组、字符指针分配的内存空间 我们知道在C/C++中,我们可以这样理解字符串和字符数组 1) 字符串,就是一个以 '0' 结尾的字符数组 2) 字符数组,包括字符串,但是不一定要以 '0' 结尾,如果不是以'0' 结尾,那么就不能当做字符串使用 在C/C++中,使用字符串可以通过数组,也可以通过为字符指针动态分配内存来存放字符串,类似于字符数组,不过这种方法的内存需要程序员自己管理 不是以 '0' 结尾的字符数组,不能作为字符串使用 char c[2]; c[0] = 'a'; c[1] …

2020年6月21日 0条评论 32点热度 阅读全文

以4皇后为例,其他的N皇后问题以此类推。所谓4皇后问题就是求解如何在4×4的棋盘上无冲突的摆放4个皇后棋子。在国际象棋中,皇后的移动方式为横竖交叉的,因此在任意一个皇后所在位置的水平、竖直、以及45度斜线上都不能出现皇后的棋子,例子 要求编程求出符合要求的情况的个数。四皇后问题有很多种解法,这里主要介绍一种经典的解决方法:回溯法 回溯法的基本思想是:可以构建出一棵解空间树,通过探索这棵解空间树,可以得到四皇后问题的一种或几种解。这样的解空间树有四棵 在如上图所示的4×4的棋盘上,按列来摆放棋子,首先因为皇后棋子不能…

2020年5月17日 0条评论 66点热度 阅读全文

流感传染 描述 有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着。在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染。请输出第m天得流感的人数。 输入 第一行一个数字n,n不超过100,表示有n*n的宿舍房间。 接下来的n行,每行n个字符,’.’表示第一天该房间住着健康的人,’#’表示该房间空着,’@’表示第一天该房间住着得流感的人。 接下来的一行是一个整数m,m不超过100. 输出 输出第m天,得流…

2020年4月29日 0条评论 31点热度 阅读全文

C语言中的指针是一个难点,主要是感觉很绕,其实C/C++中的指针和Delphi的指针的原理都是一样的,所以这里讲的一个C/C++的例子也适用于Delphi 源码如下 int i, j; int *pi, *pj; i=10; j=9; pi=&i; //相当于将指针 pi 指向 i 的地址 //比较下面两个语句 pi=&j; //这时候是将指针 pi 指向 j 的地址,并不会对i有什么影响 *pi = j; //在这是将 j 的值赋值给 pi 所指向的那个变量,所以就相当于 i = j; 所以这两个…

2020年4月24日 0条评论 29点热度 阅读全文