上一个小节我们对 C 语言的运算符有了一个基本的了解,这节课我们来详细的看下运算符中的算术运算符: 1. 算数运算符 算数运算符是用来进行算数运算的符号,主要包含以下几个符号: 运算符 作用 示例 = 赋值 a=1 + 加法或者正号 a+b, +a - 减法或者负号 a-b, -a * 乘法 a*b / 除法 a/b % 取余数 a%b ++ 自加 ++a, a++ – 自减 –a, a– 2.
作为 C 语言中主力的标准输出函数, printf 为我们提供了丰富的格式选项。 1. 格式参数 首先列举一下 printf 全部的参数: % [标志位] [显示占位宽度] [精度] [数字长度] 说明符 这里面用括号包裹的内容为可选参数,我们分项来介绍上面的各项参数,首先从最常用的说明符开始介绍: 说明符 参数含义 输出示例 o 无符号八进制数 410 x 无符号十六进制数 7ff X 无符号
用C语言完全模拟C++虚函数表的实现与运作方式 如果对前面两大节的描述仔细了解了的话,想用C语言来模拟C++的虚函数以及多态,想必是轻而易举的事情了! 前提 但是,话得说在前面,C++的编译器在生成类及对象的时候,帮助我们完成了很多事件,比如生成虚函数表! 但是,C语言编译器却没有,因此,很多事件我们必须手动来完成,包括但不限于: 手动构造父子关系 手动创建虚函数表 手动设置__vfptr并指向虚
内存分布之堆空间 栈空间是存放局部变量的存储器,主要在于栈可以出栈,入栈的操作,可以将我们的临时变量替换。只读空间可以认为是我们程序员在程序运行之前就已经设计好的数据空间。我们还需要一个运行时保留一段时间的空间-堆空间。 1.只读空间:静态空间,整个程序结束时释放内存,生存周期最长。 2.栈空间:运行时,函数内部使用的变量,函数一旦返回,就释放,生存周期在函数内。 3.堆空间:可以自由,自我管理分
内存分布之数据段 不管我们以后是自己写代码还是读别人的代码,都应该想想这个变量默认存储的位置。在我们以后的嵌入式开发中,技巧性的代码越来越多的时候,我们可能把某一些代码放在一段。我们可以通过修改变量或者代码默认放置的段,让它被放到其它的段中。我们也可以自己定义一个新的段。 随着运行,栈空间是随时会变化的。栈空间临时的去存储一些变量,当我们进入一个函数,系统就会在栈空间去分配一片内存去保存这个函数里
内存分布思想概述 通过我们前面对C的学习,我们知道了C就是不断地操作和分配内存类型资源的一种语言,它的核心思想就是如何操作内存。不管是指针还是数组,都是围绕着内存。随着对内存属性的深入,自然而然对于我们理解C的一些编程技巧和更高深的思想是很有帮助的。 内存的属性 大小 不管我们是什么数据类型,在编译器看到这个类型之后,就有一个内存大小为我们服务。只是对于指针而言,还多了一个指向类型的读取方法。 在
指针越界访问举例 我们都知道const修饰的是一个常量,是不可以被改变的量。但是在C语言中,它也许是一个中看不中用的修饰符。它是希望我们不去改变它的值,但是实际上C却不能阻止我们去修改它。和C++,Java不同,C++中的const就不能被改变。C中就并没有这种强化,当然也有它的道理。下面我们来看一个例子操作一下const常量: 测试代码如下 我们试图去修改一个常量的值。 运行结果如下 由于我们已
在Windows下,可执行程序(Executable Program)大部分是 .exe 程序,它是一系列计算机指令和数据的集合。这些指令都是二进制形式的,CPU可以直接识别,毫无障碍;但是对于程序员,它们非常晦涩,难以记忆和使用。 计算机发展初期,程序员就是使用这些二进制形式的CPU指令来编写程序的。 直接使用CPU指令编程对程序员来说简直是噩梦,尤其是当程序比较大的时候,不但编写麻烦,需要频繁
一、字符串操作<string.h> size_t strlen(char const* s); 注意:返回值类型size_t是无符号类型,和int进行运算或比较时需要注意; char* strcpy(char* dst,char const* src); 将src复制到dst,需保证dst有足够容纳src的空间,防止溢出,返回dst。若dst和src重叠,结果未定义 char* strcat(ch
预处理指令 C语言规定:源程序中可以加入一些预处理指令。但预处理指令并不是C语言本身的组成部分,编译器不能识别它们,不能直接对这些指令进行编译。在使用时需要以“#”开头,用以与C语言区分。 所谓预处理,就是指源程序在进行编译的第一遍扫描(词法分析和语法分析)之前所做的工作由预处理程序完成。当对一个源程序进行编译时,系统将自动引用预处理程序对源程序中的预处理部分进行处理(代替),处理完毕自动进入对源
英文原文 语言背后的概念 随着你的应用程序越写越复杂,就往往会发现控件树的结构/各种绑定的声明等等,都越来越繁琐复杂了,维护起来也很费力气。KV 语言就是为了解决这个问题而设计出来的。 (译者注:这种情况在 GUI 界面的 APP 开发中很常见,比如在 Android 开发的过程中,就用到了 xml 来定义界面元素的关系等等。) KV 语言(英文缩写也叫 kvlang 或者 kivy 语言),可以
语言包 为了代码更加规范,配置一个项目语言包是必不可少的事,那么下面我们就开始来给我们的网站配置中文包 语言包的配置可以根据开发需求,前台(frontend)和后台(backend)分开配置 第一步: 创建目录(frontend为例),如下图在/frontend/messages/zh-CN(这里的“CN”最好大写,Windows无影响,linux区分大小写),创建两个语言包文件 common.p
支持哪些语言 What Languages are Supported In Visual Studio Code, we have support for many languages out of the box and more through language extensions available on the VS Code Marketplace. 对于VS Code,我们已经内置
定义 为组件内建文案提供统一的国际化支持。 说明 LocaleProvider 使用 React 的 context 特性,只需在应用外围包裹一次即可全局生效。 两种方式更改信息展示: 1、配置LocaleProvider组件的locale属性值,如:enUS、zhCN。 2、直接更改组件内属性值,如Search组件的placeholder属性值。 import enUS from '../..
这一章让我们来对Ruby语言做一个从头到脚地审视。和前面的章节不同,在这里我们集中精力阐述事实,而不是揭示语言设计的细节问题。然后我们也尽量避免对内建的类和模块的介绍,这些内容在第275页开始有详细地介绍。 如果这章的内容看上去很眼熟,那是因为它们本来就应该是我们熟悉的;我们在前面介绍性的章节中对它们都有描述。应该把这一章看成自包含的对核心Ruby语法描述的语言参考。 代码编排(Source La