c语言读书笔记.docx
《c语言读书笔记.docx》由会员分享,可在线阅读,更多相关《c语言读书笔记.docx(16页珍藏版)》请在冰豆网上搜索。
c语言读书笔记
c语言读书笔记
【篇一:
c语言读书笔记】
第一章概述
1.c语言的特点
①语言简洁、紧凑,使用方便、灵活。
共有32个关键字,9种控制语句。
②运算符丰富,公有34种运算符。
③数据结构丰富,数据类型有:
整型、实型、字符型、数组、指针、结构体、共用体等。
④具有结构化的控制语句(如if…else、while、do…while、switch、for)
⑤语法限制不太严格,程序设计自由度大。
⑥允许直接访问物理地址,能进行位(bit)操作,可以直接对硬件操作。
⑦生成目标代码质量高,程序执行效率高。
⑧可移植性好。
2.c语言的用途
c虽不擅长科学计算和管理领域,但对操作系统和系统实用程序以及对硬件进行操作方面,c有明显的优势。
现在很多大型应用软件也用C编写。
第二章数据类型、运算符与表达式
1.c的数据类型
c的数据类型包括:
整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。
2.常量与变量
常量其值不可改变,符号常量名通常用大写。
变量其值可以改变,变量名只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。
否则为不合法的变量名。
变量在编译时为其分配相应存储单元。
3.整型数据
整型常量的表示方法:
十进制不用说了,八进制以0开头,如0123,十六进制以0x开头,如0x1e。
整型变量分为:
基本型(int)、短整型(shortint)、长整型(longint)和无符号型。
不同机器上各类数据所占内存字节数不同,一般int型为2个字节,long型为4个字节。
4.实型数据
实型变量分为单精度(float)和双精度(double)两类。
在一般系统中float型占4字节,7位有效数字,double型占8字节,15~16位有效数字。
5.字符型数据
字符变量用单引号括起来,如a,b等。
还有一些是特殊的字符常量,如,等。
分别代表换行和横向跳格。
字符变量以char来定义,一个变量只能存放一个字符常量。
字符串常量是由双引号括起来的字符序列。
这里一定要注意a和a的不同,前者为字符常量,后者为字符串常量,c规定:
每个字符串的结尾加一个结束标志,实际上a包含两个字符:
a和。
6.数值型数据间的混合运算
整型、字符型、实型数据间可以混合运算,运算时不同类型数据要转换成同一类型再运算,转换规则:
char,short-int-unsigned-long-double-float
7.运算符和表达式
c运算符包括:
算数运算符(+-*/%)
关系运算符(====!
=)
逻辑运算符(!
||)
位运算符(~|^)
赋值运算符(=)
条件运算符(?
:
)
逗号运算符(,)
指针运算符(*)
求字节数(sizeof)
强制类型转换(类型)
分量运算符(.-)
下标运算符([])
其它运算符(如函数调用运算符())
自增自减运算符(++--)注意:
++i和i++的不同之处,++i使用i之前先使i加1,i++使用i之后,使i加1。
逗号表达式的求解过程:
先求解表达式1,再求解表达式2,整个表达式的值是表达式2的值。
第三章最简单的c程序设计
1.c的9种控制语句:
if()~else~
for()~
while()~
do~while()
continue
break
switch
goto
return
程序的三种基本结构:
顺序结构,选择结构,循环结构
2.数据输出
c语言不提供输入输出语句,输入输出操作是由c的库函数完成。
但要包含头文件stdio.h。
putchar()向终端输出一个字符
printf()的格式字符:
①d格式符用来输出十进制整数
%d按整型数据的实际长度输出
%md使输出长度为m,如果数据长度小于m,则左补空格,如果大于m,则输出实际长度%ld输出长整型数据
②o格式符以八进制形式输出整数
③x格式符以十六进制形式输出整数
④u格式符用来输出unsigned型数据,以十进制形式输出
⑤c格式符用来输出一个字符
⑥s格式符输出一个字符串
%s输出实际长度字符串
%ms输出的串占m列,如果串长度小于m,左补空格,如果大于m,实际输出%-ms输出的串占m列,如果串长度小于m,右补空格,
%m.ns输出占m列,但只取字符串中左端n个字符并靠右对齐
%-m.nsm、n含义同上,靠左对齐,如果nm,则m自动取n值
【篇二:
c语言学习笔记(必看知识点)】
c学习笔记
--必看知识点100例(上)
--editedbylvlvfromnov.8,2013tomar.31,2014
1.define和ifndef的用法
答:
取消宏定义undef
条件编译预处理:
#ifndef标识符
#define标识符
程序段1
#else
程序段2
#endif
它的作用是当“标识符没有由#define定义过。
则编译“程序段1”。
否则编译“程序段2”。
注意:
条件编译的作用是防止此头文件被多个文件调用,产生编译冲突,这里的表示符为当前头文件名的大写前加上_,如果头文件名为err.h,则标示符为_err_h.
2.extern关键字的用法。
extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
另外,extern也可用来进行链接指定。
3.sizeof的结果等于对象或者类型所占的内存字节数。
4.snprintf()函数的用法。
答:
函数原型intsnprintf(char*str,size_tsize,constchar*format,...);功能将可变个参数(...)按照format格式化成字符串,然后将其复制到str中。
返回欲写入的字符串长度,若出错则返回负值。
5.volatile(不稳定的,易变的)关键字
答:
volatilei=10;
k=i;
volatile告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。
6.strtok函数的用法。
答:
函数原型char*strtok(chars[],constchar*delim);
例如:
strtok(abc,def,ghi,,),最后可以分割成为abcdefghi.尤其在点分十进制的ip中提取应用较多。
7.mic?
答:
英特尔集成众核(intelmanyintegratedcore,mic)架构是英特尔公司现有产品(包括英特尔至强处理器在内)的另一个关键补充。
这种架构能在一颗芯片里面支持200多个线程同时工作。
mic众核协处理器knightcorner,和之前上代larrabee继承者knightsferry不同的是,新的knightscorner从外表上看是采用与xeon类似的lga/bga封装。
从这点来看,集成50个x86核心,运算能力达到1tflops的knightscorner可能会放弃“加速卡”的形式,采用qpi总线替代pci-e界面。
7.c语言中函数指针变量的详细介绍
答:
函数指针变量的作用:
指向函数入口地址,用来调用函数。
使用函数指针的好处在于,可以将实现同一功能的多个模块统一起来标识,这样一来更容易后期的维护,系统结构更加清晰。
或者归纳为:
便于分层设计、利于系统抽象、降低耦合度以及使接口与实现分开。
函数指针变量定义的一般形式为:
类型说明符(*指针变量名)();
其中类型说明符表示被指函数的返回值的类型。
(*指针变量名)表示*后面的变量是定义的指针变量。
最后的空括号表示指针变量所指的是一个函数。
例如申明函数指针变量:
int(*pf)()或者char*(*pf)();
后者表示pf是一个指向函数入口的指针变量,该函数的返回值(函数值)是指针型,指向字符串。
使用方法:
intmax(intx,inty)
pf=函数名;
(*pf)(intx,inty);
8.conio.h头文件的说明
答:
conio.h不是c标准库中的头文件,在cstandardlibrary,isoc和posix标准中均没有定义。
conio是consoleinput/output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。
大部分dos,windows3.x,pharlap,dosx,os/2orwin32平台上的c编译器提供此文件,unix和linux平台的c编译器通常不包含此头文件。
如果需要使用此头文件,可以从互联网下载。
conio库不仅适用于windows平台,在linux下也可使用.网上已经有兼容包,下载后打开就可使用;而至于mac则完全跟windows没有区别,直接可以使用.
9.++i和i++的效率的比较。
答:
简单的比较前缀自增运算符和后缀自增运算符的效率是片面的,因为存在很多因素影响这个问题的答案。
以现在的编译器的优化水平,
在内建数据类型的情况下,效率没有区别。
在自定义数据类型的情况下,++i的效率较高。
10.c语言中near和far关键字的作用?
答:
far是和near对应的,就是一般程序的函数调用都在64k地址范围内的,就是16位寻址就够了,但是当代码比较庞大时,16位就可能不够了.far就代表32位寻址,函数的本质就是个地址,指针的本质也是个地址,所以就有了寻址的问题。
11.头文件中stdlib.h内容。
答:
stdlib.h里面定义了五种类型、一些宏和通用工具函数。
类型例如size_t、wchar_t、div_t、ldiv_t和lldiv_t;宏例如exit_failure、exit_success、rand_max和mb_cur_max等等;常用的函数如malloc()、calloc()、realloc()、free()、system()、atoi()、atol()、rand()、srand()、exit()等等。
12.#define只有宏名定义是什么意思!
答:
一般来说这样空的宏都是为了某些手段的,例如跨平台,比如说在windows下我让a赋值为10,在linux下要让a赋值为20,那么就可以这么写
#ifdefwindows
a=10;
#endif
#ifdeflinux
a=20;
#endif;
这样我只要在某个地方定义一个#definewindows或者#definelinux就可以在跨平台的情况下采取不同的策略了.
#undef是在后面取消以前定义的宏定义
18.extern“c”修饰符的理解!
答:
被externc修饰的变量和函数是按照c语言方式编译和连接的;
19.c++中增加函数重载的功能的内部原理!
答:
c语言是不支持函数重载功能的,
voidfoo(intx,inty);
该函数被c编译器编译后在符号库中的名字为_foo,而c++编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为“mangledname”)。
_foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,c++就是靠这种机制来实现函数重载的。
20.理解c、c++和c#中变量生存期的区别!
答:
应该从作用域的角度来区分变量的生存周期,生存周期分为三种:
整个程序:
修饰的关键字有static
当前文件(.c、.cpp、.cs文件):
修饰的关键字有:
c语言:
auto(自动变量),c++语言:
private、protected、public等,c#中:
private、protected、public、partial等。
当前程序段(if语句段、函数体等):
修饰的关键字有:
同当前文件
注:
函数体外定义静态变量为全局静态变量,函数体内定义静态变量为局部静态变量,二者生存周期都是整个程序。
且c语言中没有私有和公有之分,c++扩充了这一个功能。
21.引用和指针的区别?
答:
1.从内存上来讲系统为指针分配内存空间,而引用与绑定的对象共享内存空间,系统不为引用变量分配内容空间。
2指针初始化以后可以改变指向的对象,而引用定义的时候必须要初始化,且初始化以后不允许再重新绑定对象。
3.所以引用访问对象是直接访问。
指针访问对象是间接访问。
4。
如果pa是指针,那么*pa就是引用了。
又如inta,ra=a;那么ra就是a的reference了。
22.c语言中头文件、库文件和.c文件的联系与区别。
答:
h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。
附加依赖项的是.lib不是.dll,若生成了dll,则肯定也生成lib文件。
如果要完成源代码的编译和链接,有头文件和lib就够了。
如果也使动态连接的程序运行起来,有dll就够了。
在开发和调试阶段,当然最好都有。
23.c语言中编译链接的过程!
答:
obj文件是目标文件,一般是程序编译后的二进制文件,在通过链接器和资源文件链接就成exe文件了。
obj只给出了程序的相对地址,而exe是绝对地址。
obj文件不支持有孔的多边形面。
24.常见字符编码有:
ascii编码(americanstandardcodeforinformationinterchange)基本的ascii字符集共有128个字符,包括常用的字母、数字、标点符号等,一个字节来存放一个ascii字符。
big-5码:
是通行于台湾、香港地区的一个繁体字编码方案,俗称“大五码”。
gb2312编码:
对ascii编码的扩充,收录简体中文和常用字符,通用于中国大陆。
每个汉字占用两个字节。
基本集共收入汉字6763个和非汉字图形字符682个。
对于人名、古汉语等方面出现的罕用字,gb2312不能处理,这导致了后来gbk及gb18030汉字字符集的出现。
gbk编码:
对gb2312的扩充,收录了繁体中文,简、繁体字融于一库,每个汉字占用两个字节。
unicode编码:
注意,unicode只是一个编码规范,目前实际实现的unicode编码只要有三种:
utf-8,ucs-2和utf-16。
unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。
unicode固然统一了编码方式,但是它的效率不高,比如ucs-4(unicode的标准之一)规定用4个字节存储一个符号,那么每个英文字母前都必然有三个字节是0,这对存储和传输来说都很耗资源。
utf-8编码:
utf-8是一种8位的unicode字符集,编码长度是可变的,并且是ascii字符集的严格超集,也就是说ascii中每个字符的编码在utf-8中是完全一样的。
utf-8字符集中,一个字符可能是1个字节,2个字节,3个字节或者4个字节长。
一般来说,欧洲的字母字符长度为1到2个字节,而亚洲的大部分字符则是3个字节,附加字符为4个字节长。
ucs-2编码:
ucs-2是固定长度为16位的unicode字符集。
每个字符都是2个字节,ucs-2只支持unicode3.0,所以不支持附加字符。
ucs-2的优点:
对于亚洲字符的存储空间需求比utf-8少,因为每个字符都是2个字节。
处理字符的速度比utf-8更快,因为是固定长度编码的。
对于windows和java的支持更好。
utf-16编码:
utf-16也是一种16位编码的字符集。
实际上,utf-16就是ucs-2加上附加字符的支持,也就是符合unicode4.0规范的ucs-2。
所以utf-16是ucs-2的严格超集。
utf-16中的字符,要么是2个字节,要么是4个字节表示的。
utf-16主要在windows2000以上版本使用。
utf-16相对utf-8的优点,和ucs-2是一致的。
总结:
在亚洲进行在web开发时,面向的是全球,使用utf-8编码是绝对没有错的,面向亚洲的话,使用ucs-2和utf编码效率会更高。
综上所述,使用utf-8编码绝对没有错,不会出现编码乱码的现象。
25.sqlsever中char、varchar、nchar和nvarchar的对比区别!
答:
ncahr和nvarchar采用unicode编码,固定每个字符占用两个字节,char和varchar固定每个字符采用一个字节。
所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar我把他们的区别概括成:
char,nchar定长,速度快,占空间大,需处理
varchar,nvarchar,text不定长,空间小,速度慢,无需处理。
注意:
操作系统的语言环境支持中文可以使用char和varchar,如果操作系统环境不支持中文,必须使用nvarchar和ncahr。
请协调好存储代价和兼容性之间的关系。
26.md5利用salt进行加密的过程程?
用户输入【账号】和【密码】(以及其他用户信息);
系统为用户生成【salt值】;
系统将【salt值】和【用户密码】连接到一起;
对连接后的值进行散列,得到【hash值】;
将【hash值1】和【salt值】分别放到数据库中。
用户登录时,
用户输入【账号】和【密码】;
系统通过用户名找到与之对应的【hash值】和【salt值】;
系统将【salt值】和【用户输入的密码】连接到一起;
对连接后的值进行散列,得到【hash值2】(注意是即时运算出来的值);
比较【hash值1】和【hash值2】是否相等,相等则表示密码正确,否则表示密码错误。
有时候,为了减轻开发压力,程序员会统一使用一个salt值(储存在某个地方),而不是每个用户都生成私有的salt值。
27.md5简介!
【篇三:
c语言读书笔记】
第一章概述+s8j+t(qc#zc
1.c语言的特点%b9j1p0l$^#t/}5c1d
①语言简洁、紧凑,使用方便、灵活。
共有32个关键字,9种控制语句。
②运算符丰富,公有34种运算符。
③数据结构丰富,数据类型有:
整型、实型、字符型、数组、指针、结构体、共用体等。
④具有结构化的控制语句(如if…else、while、do…while、switch、for)
⑤语法限制不太严格,程序设计自由度大。
.t-o,p1i-j!
hx:
px1t
⑥允许直接访问物理地址,能进行位(bit)操作,可以直接对硬件操作。
⑦生成目标代码质量高,程序执行效率高。
;{c/s!
(t
⑧可移植性好。
2.c语言的用途(w#k(^9j-b,i
c虽不擅长科学计算和管理领域,但对操作系统和系统实用程序以及对硬件进行操作方面,c有明显的优势。
现在很多大型应用软件也用C编写。
9g2?
21s3d
第二章数据类型、运算符与表达式
1.c的数据类型
c的数据类型包括:
整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。
e*a!
r+d:
w%b7j
2.常量与变量
常量其值不可改变,符号常量名通常用大写。
变量其值可以改变,变量名只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。
否则为不合法的变量名。
变量在编译时为其分配相应存储单元。
0`s8k9u/o@
3.整型数据
整型常量的表示方法:
十进制不用说了,八进制以0开头,如0123,十六进制以0x开头,如0x1e。
整型变量分为:
基本型(int)、短整型(shortint)、长整型(longint)和无符号型。
不同机器上各类数据所占内存字节数不同,一般int型为2个字节,long型为4个字节。
%{8_f!
a8~6o3l
4.实型数据
实型变量分为单精度(float)和双精度(double)两类。
在一般系统中float型占4字节,7位有效数字,double型占8字节,15~16位有效数字。
5.字符型数据o,g(g7b7@/r(m*a
字符变量用单引号括起来,如a,b等。
还有一些是特殊的字符常量,如,等。
分别代表换行和横向跳格。
2e-x+y5{u6vu%f8l/x)a
字符变量以char来定义,一个变量只能存放一个字符常量。
字符串常量是由双引号括起来的字符序列。
这里一定要注意a和a的不同,前者为字符常量,后者为字符串常量,c规定:
每个字符串的结尾加一个结束标志,实际上a包含两个字符:
a和。
5d4r4g7z(w(g6b-ka
6.数值型数据间的混合运算5a:
n/{/df0`(h
整型、字符型、实型数据间可以混合运算,运算时不同类型数据要转换成同一类型再运算,转换规则:
char,short-int-unsigned-long-double-float3x-w2y6xq6k-m3b
7.运算符和表达式7l.i+`6n3c(b.n4z
c运算符包括:
算数运算符(+-*/%)#h8{(sc6n*l$t`#t;r
关系运算符(====!
=))`([a)k/x%m,a6b
逻辑运算符(!
||)
位运算符(~|^)4a:
x#q:
d;u*v
赋值运算符(=)
条件运算符(?
:
);o5e:
j2x5w1y;y3s9y5|5l
逗号运算符(,)
指针运算符(*)
求字节数(sizeof)
强制类型转换(类型)#ro5p!
t;gq1ng
分量运算符(.-)a/y2h(o#n)q!
*p
下标运算符([])
其它运算符(如函数调用运算符())1p/@/b.f,m,qb,r
自增自减运算符(++--)注意:
++i和i++的不同之处,++i使用i之前先使i加1,i++使用i之后,使i加1。
逗号表达式的求解过程:
先求解表达式1,再求解表达式2,整个表达式的值是表达式2的值。
+v!
k}:
r-a$e)x7i
1if-[e5{,u
第三章最简单的c程序设计
1.c的9种控制语句:
7f6p9_$k:
f9e#o0h9t%n5a
if()~else~
for()~5-w4q8g*l)h7b
while()