c语言
拒绝内卷007
大龄码农
展开
-
C语言笔记之结构体
结构的本质是C语言的一种数据抽象,通俗的说,是基本数据类型的重组。为什么要重组呢?因为基本数据类型不够用了。为什么不够用了呢?因为需要的信息类型太多了。这是一个很大的话题。信息本来是没有什么类型之分的,但是为了便于在计算机内部的管理,人们在C语言中把信息先分成了基本的几个类型,比如整型、浮点型、字符型、布尔型等等。但是呢,描述一个事物的全部信息有时候仅用一种基本类型是不够的,比如一本书的基本属性:作者(字符型)、价格(浮点型)、出版日期(我也不知道什么型)、书名(字符型)。然而操蛋的是,我们要处理的并非是这原创 2014-05-06 22:55:11 · 1209 阅读 · 0 评论 -
C语言笔记之存储类
存储时期的自动与静态可以分别用关键字auto和static来显式声明,而链接的内部或外部分别由static和extern来修饰。但是对于不同作用域的变量,存在着默认情况。由上表可知,只要是作用域为代码块的变量,其存储时期默认为自动,从而auto都是省略不写的;但是要使这样的变量具有静态存储时期,就必须显式的使用static声明。链接类型的话,都是空链接,不再区别内外。也可以看到,这类变量都是定义在代码块内部的,抛开寄存器变量这个异类,这类变量之间的唯一区别就在于有没有被static修饰(从而意味着是不是静原创 2015-03-03 22:47:16 · 838 阅读 · 0 评论 -
C语言笔记之宏定义
宏定义是C语言中的一种替换策略,即使用预处理命令 #define 将一串(冗长的)文本与某个名字(称为宏)等同起来,然后就可以在源代码中批量使用宏。在预处理阶段再将源代码中的宏替换为原来的文本。例如,在源代码中:#define PI 3.14那么在接下来的代码中,需要写3.14的地方可以直接用PI代替。预处理的时候,PI又全部变回3.14。原创 2015-04-28 22:30:52 · 1183 阅读 · 3 评论 -
C语言笔记之数据类型(二)
当把一个高容量的类型强制转换为低容量的类型时,会发生截断:丢弃二进制的高位,只保留低位(二进制的左边为高位,右边为低位);而把低容量类型强制转换成高容量类型时,会发生扩展:在二进制的高位左边继续填充数字。扩展分为两类:零扩展和符号扩展。原创 2015-05-01 16:10:18 · 713 阅读 · 0 评论 -
C语言笔记之头文件与链接(二)
那为什么要把目标文件做成库文件呢?首先,如果有太多目标文件的话,gcc命令会敲的手疼(⊙﹏⊙b汗),而库文件的编译命令就很简洁;其次,假设我们又在judge.c中添加了一个无关的add函数,那么直接链接目标文件,会把这些无关代码也加进可执行文件中,于是如果无关函数很多的话,就是使得可执行文件变得很大,但是如果链接库文件的话,链接器可以从静态库中只取出需要的部分来做。原创 2015-04-27 22:29:12 · 1801 阅读 · 0 评论 -
C语言笔记之const关键字
稍微介绍一下指针。指针就是地址,而所谓地址,就是一串数字,但是这个数字却标示了内存中的一个存储单元。要知道内存中的每个存储单元都是有编号的。当然,存储单元里面存放的内容本质上也是一串数字,但必须搞清楚,存储单元的编号和内容不是一回事,或者说没有什么关系,因为它们的解读方式不同。由于表示地址的数字太长,不容易记忆,所以C语言使用了变量名称来代替这个数字。可以知道,在编译阶段,每个变量名称都是要最终替换成某个“数字地址”的,也就是说,变量名和某个存储单元的地址是绑定的、对应的。原创 2015-04-08 10:45:12 · 513 阅读 · 0 评论 -
C语言笔记之条件编译
#ifdef #else 格式非常类似于C中 的if else 。主要差异为预处理器不能识别标记代码块的花括号 {} ,因此使用#else (如果需要)和#endif (必须存在)来标记指令块。这些条件结构可以嵌套。原创 2015-04-29 22:25:29 · 615 阅读 · 0 评论 -
C语言笔记之数据类型(三)
再联想到十进制的科学记数法,我们发现二进制也可以表示成x * 2 ^ y这种形式,其中x是一个定点数,它的小数点左边即整数部分只有一位,且只能是1不能是0(因为如果是0,我们总可以将小数点向右移动直到遇见1);右边只能有固定位数的小数部分。y是2的幂,其大小为小数点移动的位数,当然根据向左还是向右,要添加适当的正负号。这样,每个二进制非整数都要通过移动小数点来变成以上形式(该过程称为规范化),所以这种表示法称为浮点表示法。用这种方法表示的二进制非整数,我们只需要存储三个部分:数的符号,尾数,指数(小数点移原创 2015-05-05 22:11:43 · 1341 阅读 · 0 评论 -
C语言笔记之printf()函数
printf()的参数分为两大部分,分别是控制字符串和参数列表,二者用逗号隔开,而且参数之间也要用逗号隔开。其中控制字符串是字符串常量,如果不需要其他参数的话,双引号里面的文字将被原原本本的打印到屏幕。通俗的讲,双引号里面是什么,输出的就是什么,包括转义字符。 但是,这样以来,我们无论想要打印什么,都只能手动的写在双引号内部,从而无法实现自动化打印。比如,怎样输出程序中变量的值?总不能变量的值变一次我们就手动改写原创 2015-05-10 18:37:24 · 1055 阅读 · 0 评论 -
C语言自增自减运算符深入剖析(转自:http://bbs.csdn.net/topics/330189207)
#include void main() /*主函数*/ { int a,b,c,d; a=5; b=5; c=(a++)+(a++)+(a++); d=(++b)+(++b)+(++b); printf("a=%d,b=%d,c=%d,d=%d\n",a,b,c,d); } 结果是什么?而后Eric搜了一下后发现,类似的问题很多,也就是转载 2013-12-08 14:29:47 · 1030 阅读 · 0 评论 -
C语言笔记之typedef
你没看错,typedef甚至可以定义函数类型!!如下:typedef int func(double var);这样就定义了一个函数类型func,以后就可以用func来定义变量。这条语句的理解同上面,先去掉typedef,再加上typedef,看func的含义变化。原创 2015-04-09 10:27:21 · 550 阅读 · 0 评论 -
C语言笔记之头文件与链接(一)
在大型项目中,仅仅一个源文件是不够的,巨大的代码量需要分别放在几个文件中,当然分开存放的更主要的目的是便于模块化。我们把代码按照不同的功能或作用分隔存放在不同的文件中,那么当其中一个功能有改动时,只需要重新编译相关的文件,而不必编译整个项目的所有源文件。但是,这样就带来了一个问题:在一个文件中定义的变量或函数,能不能在另一个文件中使用呢?或者两个文件中同名的变量会不会引起冲突呢?为了回答这个问题,首先要明白C语言的源代码如何一步步生成可执行代码的。原创 2015-04-27 22:23:15 · 2184 阅读 · 0 评论 -
C语言笔记之数据类型(一)
因为对于不同大小的数,所需要的存储空间大小不同。如果都用4个字节存储,那么肯定不用分数据类型,但是好浪费哦~所以,本着节省内存的考虑,数据类型就诞生了。C的数据类型分为基本数据类型和复合数据类型,后者只是前者的某种组合。基本数据类型按照其在计算机中的存储方式又分为整数类型和浮点数类型。可以明显的看出,将一个负数强制转换为无符号数,并没有改变其位模式(二进制表示),它仍然按照原来的模样存储,第四行的结果证明了这一点。。。原创 2015-05-01 15:49:59 · 1387 阅读 · 0 评论 -
C语言笔记之scanf函数
从键盘输入的是文本,因为那些键生成文本字符: 字母、数字和标点。比如说,当您想输入整数2004时,您键入字符2、 0、 0和 4 ,如果想把它们存储成4个数值而非字符串,那么您的程序必须把这个字符串逐个字符地转换成数值,这就是scanf()所做的工作!它把输入的字符串转换成各种形式:整数、浮点数、字符和 C的字符串。它是 printf()的逆操作,后者把整数、浮点数、字符和 C的字符串转换成要在屏幕上显示的文本。原创 2015-06-22 10:30:37 · 933 阅读 · 0 评论