
Ⅰ. 预定义符号
在C语言中,有一些有意思的预定义符号,这些预定义符号都是语言内置的,即以及定义好的,我们可以直接使用。预定义符号主要有以下几个: 这些预定义符号是已经用define定义好的,在代码运行后的预处理阶段会被替换为相应的内容,所以我们直接使用即可! 这些预定义符号的使用方法一致,只是需要注意打印的格式是 %s 还是 %d 就行了。例如,运行以下代码: \define定义标识符的格...

在C语言中,有一些有意思的预定义符号,这些预定义符号都是语言内置的,即以及定义好的,我们可以直接使用。预定义符号主要有以下几个: 这些预定义符号是已经用define定义好的,在代码运行后的预处理阶段会被替换为相应的内容,所以我们直接使用即可! 这些预定义符号的使用方法一致,只是需要注意打印的格式是 %s 还是 %d 就行了。例如,运行以下代码: \define定义标识符的格...

我们知道,整型变量有自己的大小,浮点型变量有自己的大小,数组也有自己的大小,那么结构体有没有自己的大小呢❓ 回答是肯定的,结构体也有自己的大小,但是结构体的大小并不是简单地将每个结构体成员的大小相加就能得到。结构体的大小计算遵循结构体的对齐规则: 第一个成员在与结构体变量偏移量为0的地址处。(即结构体的首地址处,即对齐到0处) 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 结构体...

我们用编译器写完代码后,只需 Crtl+F5 即可让代码跑起来,最后将结果输出到屏幕上,那么你知道在这个过程中都经过了哪些步骤吗? 其实,在ANSI C(标准C)的任何一种实现中,都存在两个不同的环境,即翻译环境和执行环境。翻译环境,在这个环境中,代码被转换为可执行的机器指令。执行环境,它用于实际执行代码。 我们运行代码时都将经历这两个过程,最后才将运行结果呈现在屏幕上。 ...

柔性数组(Flexible Array)是一种 C99 标准引入的特性,也称为变长数组(Variable Length Array),它允许在结构体中定义一个大小不确定的数组。在结构体定义中,柔性数组必须是最后一个成员,其大小在结构体实例化时被动态指定。 比如: 或者: 比如,当你创建含有柔性数组成员的结构体时,结构体成员不能单单只有一个柔性数组成员: 除了柔性数组成...

要了解整型在内存中的存储方式,我们首先要了解几个概念:原码、反码、补码 计算机中的有符号数有三种表示方法,即原码、反码和补码。 三种表示方法均由符号位和数值位组成,符号位为0表示正数,符号位为1表示负数,但数值位的三种表示方法各不相同。 原码:直接将数字按照正负数的形式翻译成二进制即可。 反码:将原码符号位不变,其他位依次按位取反即可得到反码。 补码:反码加一即可得到补码。 (注...

strcpy 函数是一个用于拷贝字符串的函数,即将一个字符串中的内容拷贝到另一个字符串中(会覆盖原字符串内容)。它的参数是两个指针,第一个指向的是拷贝字符串的目的地的起始位置,即要将字符串拷贝到什么地方;第二个指向的是要拷贝字符串的内容的起始位置,即需要拷贝的字符串。它的返回值是目标空间的起始位置。 源字符串(需要被拷贝的字符串)必须以 ’\0’ 结束。 会将源字符串中的 ’\0’ 一同...

该文章转自:上次说了静态数组可变长,今天知道原理了 变长数组,那么是长度一直可以变的吗,到底什么时候这个长度会确定下来呢? 我们先看一下代码,如下:(注意vs编译器中不支持变长数组) 假设我们第一次输入100,第二次输入10000,那么最后一个cout到底输出多少呢,答案是100。 这里的所谓变长数组,实际上指的是可以使用变量来作为数组的元素个数,在还未运行到声明数组的地方...
通讯录就是为了存储许多联系人的不同方面的信息如名字、电话、地址、年龄、性别等,除此之外,还要实现增删查改还有打印通讯录等功能,所以我们先把要实现的功能列出来: 增加联系人 删除联系人 搜索联系人 修改联系人信息 按年龄大小排序联系人 打印联系人信息 在写函数之前,我们也要先定义一个结构体来存放联系人的信息还有联系人个数以及通讯录的最大容量,所以我们建一个头文件,称为cont...
如果我们被问道:如何创建一个可以根据用户需求来开辟大小的数组? 可能有些博友会写出如下代码: 这个代码在C99标准下是可以运行的,但大多数编译器并不支持C99标准,所以这种代码缺乏了跨平台性(可移植性),那么我们有没有办法写出一个既可以满足题目要求,又可以在任何一个编译器下都编译得过去的代码呢? 答案是肯定的。这就和C语言中的动态内存的开辟有关了,动态开辟,即可以按照需求开...

注:本文章所使用的编译器是VS2010,由于不同编译器的函数栈帧与销毁略有差异,所以具体细节请读者自行实践! 寄存器有:eax、ebx、ecx、edx、edi、esi、ebp、esp 其中 ebp 和 esp 是用来维护函数栈帧的,他们里面存放的是地址。 他们维护的是某个正在被调用的函数。通常我们又称 ebp 为栈底指针,称 esp 为栈顶指针 push:压栈 pop:出栈 mov:若有变量a,b...