1、c语言读书笔记c语言读书笔记【篇一:c语言读书笔记】 第一章 概述 1 c语言的特点 语言简洁、紧凑,使用方便、灵活。共有个关键字,种控制语句。 运算符丰富,公有种运算符。 数据结构丰富,数据类型有:整型、实型、字符型、数组、指针、结构体、共用体等。 具有结构化的控制语句(如ifelse、while、dowhile、switch、for) 语法限制不太严格,程序设计自由度大。 允许直接访问物理地址,能进行位(bit)操作,可以直接对硬件操作。 生成目标代码质量高,程序执行效率高。 可移植性好。 2 c语言的用途 c虽不擅长科学计算和管理领域,但对操作系统和系统实用程序以及对硬件进行操作方面,c
2、有明显的优势。现在很多大型应用软件也用编写。第二章 数据类型、运算符与表达式 1 c的数据类型 c的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。 2 常量与变量 常量其值不可改变,符号常量名通常用大写。变量其值可以改变,变量名只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。否则为不合法的变量名。变量在编译时为其分配相应存储单元。 3 整型数据 整型常量的表示方法:十进制不用说了,八进制以0开头,如0123,十六进制以0x开头,如0x1e。 整型变量分为:基本型(int)、短整型(short int)、长
3、整型(long int)和无符号型。不同机器上各类数据所占内存字节数不同,一般int型为个字节,long型为4个字节。 4 实型数据 实型变量分为单精度(float)和双精度(double)两类。在一般系统中float型占4字节,7位有效数字,double型占8字节,1516位有效数字。 5 字符型数据 字符变量用单引号括起来,如a,b等。还有一些是特殊的字符常量,如, 等。分别代表换行和横向跳格。字符变量以char 来定义,一个变量只能存放一个字符常量。 字符串常量是由双引号括起来的字符序列。这里一定要注意a和a的不同,前者为字符常量,后者为字符串常量,c规定:每个字符串的结尾加一个结束标志
4、,实际上a包含两个字符:a和。 6 数值型数据间的混合运算 整型、字符型、实型数据间可以混合运算,运算时不同类型数据要转换成同一类型再运算,转换规则: char,short - int - unsigned - long - double - float 7 运算符和表达式 c运算符包括: 算数运算符( + - * / % ) 关系运算符( = = = != ) 逻辑运算符( ! | ) 位运算符( | ) 赋值运算符( = ) 条件运算符( ? : ) 逗号运算符( , ) 指针运算符( * )求字节数( sizeof ) 强制类型转换(类型) 分量运算符( . - ) 下标运算符( ) 其
5、它运算符( 如函数调用运算符( ) ) 自增自减运算符( + - )注意:+i和i+的不同之处,+i使用i之前先使i加,i+使用i之后,使i加。 逗号表达式的求解过程:先求解表达式,再求解表达式,整个表达式的值是表达式的值。第三章 最简单的程序设计 c的种控制语句: if() else for() while() dowhile() continue break switch gotoreturn 程序的三种基本结构:顺序结构,选择结构,循环结构 数据输出 c语言不提供输入输出语句,输入输出操作是由c的库函数完成。但要包含头文件stdio.h。 putchar( ) 向终端输出一个字符 pri
6、ntf( )的格式字符: 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.
7、ns m、n含义同上,靠左对齐,如果nm,则m自动取n值【篇二:c语言学习笔记(必看知识点)】 c学习笔记 -必看知识点100例(上) -edited by lvlv from nov. 8,2013 to mar. 31,2014 1. define和ifndef的用法 答:取消宏定义undef 条件编译预处理: #ifndef 标识符 # define 标识符 程序段 1 #else 程序段 2 #endif 它的作用是当 “ 标识符 没有由# d e f i n e定义过。 则编译“程序段 1”。否则编译“程序段 2” 。 注意:条件编译的作用是防止此头文件被多个文件调用,产生编译冲突,
8、这里的表示符为当前头文件名的大写前加上_,如果头文件名为err.h,则标示符为_err_h. 2. extern关键字的用法。 extern可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 另外,extern也可用来进行链接指定。 3. sizeof的结果等于对象或者类型所占的内存字节数。 4. snprintf()函数的用法。 答:函数原型int snprintf(char *str, size_t size, const char *format, .);功能将可变个参数(.)按照format格式化成字符串,然后将其复制到s
9、tr中。返回欲写入的字符串长度,若出错则返回负值。 5. volatile(不稳定的,易变的)关键字 答:volatile i=10; k=i; volatile 告诉编译器i是随时可能发生变化的,每次使用它的时候必须从i的地址中读取,因而编译器生成的可执行码会重新从i的地址读取数据放在k中。 6. strtok函数的用法。 答:函数原型char *strtok(char s, const char *delim); 例如:strtok(abc,def,ghi,),最后可以分割成为abc def ghi.尤其在点分十进制的ip中提取应用较多。 7.mic?答:英特尔集成众核(intel man
10、y integrated core,mic)架构是英特尔公司现有产品(包括英特尔至强处理器在内)的另一个关键补充。这种架构能在一颗芯片里面支持200多个线程同时工作。 mic众核协处理器knight corner,和之前上代larrabee继承者knights ferry不同的是,新的knights corner从外表上看是采用与xeon类似的lga/bga封装。从这点来看,集成50个x86核心,运算能力达到1tflops的knights corner可能会放弃“加速卡”的形式,采用qpi总线替代pci-e界面。 7. c语言中函数指针变量的详细介绍 答: 函数指针变量的作用:指向函数入口地址
11、,用来调用函数。 使用函数指针的好处在于,可以将实现同一功能的多个模块统一起来标识,这样一来更容易后期的维护,系统结构更加清晰。或者归纳为:便于分层设计、利于系统抽象、降低耦合度以及使接口与实现分开。 函数指针变量定义的一般形式为: 类型说明符 (* 指针变量名 )(); 其中 类型说明符 表示被指函数的返回值的类型。 (* 指针变量名 ) 表示 * 后面的变量是定义的指针变量。 最后的空括号表示指针变量所指的是一个函数。例如申明函数指针变量:int (*pf)()或者char * (*pf)(); 后者表示 pf 是一个指向函数入口的指针变量,该函数的返回值 ( 函数值 ) 是指针型,指向字
12、符串。 使用方法:int max(int x,int y) pf=函数名; (*pf)(int x,int y); 8.conio.h头文件的说明 答:conio.h不是c标准库中的头文件,在c standard library,iso c 和posix标准中均没有定义。conio是console input/output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。 大部分dos,windows 3.x,phar lap,dosx,os/2 or win32平台上的c编译器提供此文件,unix
13、和linux平台的c编译器通常不包含此头文件。 如果需要使用此头文件,可以从互联网下载。 conio库不仅适用于 windows 平台,在 linux 下也可使用.网上已经有兼容包,下载后打开就可使用;而至于 mac 则完全跟 windows 没有区别,直接可以使用. 9. +i和i+的效率的比较。 答:简单的比较前缀自增运算符和后缀自增运算符的效率是片面的,因为存在很多因素影响这个问题的答案。以现在的编译器的优化水平, 在内建数据类型的情况下,效率没有区别。在自定义数据类型的情况下,+i的效率较高。 10.c语言中near和far关键字的作用?答:far是和near对应的,就是一般程序的函数
14、调用都在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()、
15、rand()、srand()、exit()等等。 12.#define只有宏名定义是什么意思! 答:一般来说这样空的宏都是为了某些手段的,例如跨平台,比如说在windows下我让a赋值为10,在linux下要让a赋值为20,那么就可以这么写 #ifdef windows a = 10; #endif #ifdef linux a = 20; #endif; 这样我只要在某个地方定义一个#define windows或者#define linux就可以在跨平台的情况下采取不同的策略了. #undef 是在后面取消以前定义的宏定义 18.extern “c”修饰符的理解! 答:被extern c修
16、饰的变量和函数是按照c语言方式编译和连接的; 19.c+中增加函数重载的功能的内部原理! 答:c语言是不支持函数重载功能的, void foo( int x, int y ); 该函数被c编译器编译后在符号库中的名字为_foo,而c+编译器则会产生像_foo_int_int之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为“mangled name”)。_foo_int_int这样的名字包含了函数名、函数参数数量及类型信息,c+就是靠这种机制来实现函数重载的。 20.理解c、c+和c#中变量生存期的区别! 答:应该从作用域的角度来区分变量的生存周期,生存周期分
17、为三种: 整个程序:修饰的关键字有static 当前文件(.c、.cpp、.cs文件):修饰的关键字有:c语言:auto(自动变量),c+语言:private、protected、public等,c#中:private、protected、public、partial等。 当前程序段(if语句段、函数体等):修饰的关键字有:同当前文件 注:函数体外定义静态变量为全局静态变量,函数体内定义静态变量为局部静态变量,二者生存周期都是整个程序。且c语言中没有私有和公有之分,c+扩充了这一个功能。 21.引用和指针的区别?答: 1.从内存上来讲 系统为指针分配内存空间,而引用与绑定的对象共享内存空间,系
18、统不为引用变量分配内容空间。 2指针初始化以后可以改变指向的对象,而引用定义的时候必须要初始化,且初始化以后不允许再重新绑定对象。 3.所以引用访问对象是直接访问。指针访问对象是间接访问。 4。如果pa是指针,那么*pa就是引用了。又如int a,ra= a;那么ra就是a的reference了。 22. c语言中头文件、库文件和.c文件的联系与区别。 答:h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。 附加依赖项的是.lib不是.dll,若生成了dll,则肯定也生成 lib文件。如果要完成源代码的编译和链接,有头文件和lib就够了。如果也使动态连接的程序运行起来,有dl
19、l就够了。在开发和调试阶段,当然最好都有。 23.c语言中编译链接的过程! 答:obj文件是目标文件,一般是程序编译后的二进制文件,在通过链接器和资源文件链接就成exe文件了。 obj只给出了程序的相对地址,而exe是绝对地址。 obj文件不支持有孔的多边形面。 24.常见字符编码有: ascii编码(american standard code for information interchange)基本的 ascii 字符集共有 128 个字符,包括常用的字母、数字、标点符号等,一个字节来存放一个 ascii 字符。 big-5码:是通行于台湾、香港地区的一个繁体字编码方案,俗称“大五码”
20、。 gb2312编码:对ascii编码的扩充,收录简体中文和常用字符,通用于中国大陆。每个汉字占用两个字节。基本集共收入汉字6763个和非汉字图形字符682个。对于人名、古汉语等方面出现的罕用字,gb 2312不能处理,这导致了后来gbk及gb 18030汉字字符集的出现。 gbk编码:对gb2312的扩充,收录了繁体中文,简、繁体字融于一库,每个汉字占用两个字节。 unicode编码:注意,unicode只是一个编码规范,目前实际实现的unicode编码只要有三种:utf-8,ucs-2和utf-16。unicode当然是一个很大的集合,现在的规模可以容纳100多万个符号。unicode固然
21、统一了编码方式,但是它的效率不高,比如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字符集。
22、每个字符都是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-1
23、6相对utf-8的优点,和ucs-2是一致的。 总结:在亚洲进行在web开发时,面向的是全球,使用utf-8编码是绝对没有错的,面向亚洲的话,使用ucs-2和utf编码效率会更高。综上所述,使用utf-8编码绝对没有错,不会出现编码乱码的现象。 25.sql sever 中char、varchar、nchar和nvarchar的对比区别! 答:ncahr和nvarchar采用unicode编码,固定每个字符占用两个字节,char和varchar固定每个字符采用一个字节。 所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar 我把他们的区别
24、概括成: char,nchar 定长,速度快,占空间大,需处理 varchar,nvarchar,text 不定长,空间小,速度慢,无需处理。 注意:操作系统的语言环境支持中文可以使用char和varchar,如果操作系统环境不支持中文,必须使用nvarchar和ncahr。请协调好存储代价和兼容性之间的关系。 26.md5利用salt进行加密的过程程? 用户输入【账号】和【密码】(以及其他用户信息); 系统为用户生成【salt值】; 系统将【salt值】和【用户密码】连接到一起; 对连接后的值进行散列,得到【hash值】; 将【hash值1】和【salt值】分别放到数据库中。 用户登录时,
25、用户输入【账号】和【密码】; 系统通过用户名找到与之对应的【hash值】和【salt值】; 系统将【salt值】和【用户输入的密码】连接到一起; 对连接后的值进行散列,得到【hash值2】(注意是即时运算出来的值); 比较【hash值1】和【hash值2】是否相等,相等则表示密码正确,否则表示密码错误。 有时候,为了减轻开发压力,程序员会统一使用一个salt值(储存在某个地方),而不是每个用户都生成私有的salt值。 27.md5简介!【篇三:c语言读书笔记】 第一章 概述+ s8 j+ t( q c# z c 1 c语言的特点% b9 j1 p0 l$ # t/ 5 c1 d 语言简洁、紧凑
26、,使用方便、灵活。共有个关键字,种控制语句。 运算符丰富,公有种运算符。 数据结构丰富,数据类型有:整型、实型、字符型、数组、指针、结构体、共用体等。 具有结构化的控制语句(如ifelse、while、dowhile、switch、for) 语法限制不太严格,程序设计自由度大。. t- o, p1 i- j! h x: p x1 t 允许直接访问物理地址,能进行位(bit)操作,可以直接对硬件操作。 生成目标代码质量高,程序执行效率高。; c/ s! ( t 可移植性好。 2 c语言的用途( w# k( 9 j- b, i c虽不擅长科学计算和管理领域,但对操作系统和系统实用程序以及对硬件进行
27、操作方面,c有明显的优势。现在很多大型应用软件也用编写。 9 g2 ?2 1 s3 d 第二章 数据类型、运算符与表达式 1 c的数据类型 c的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。, e* a! r+ d: w% b7 j 2 常量与变量 常量其值不可改变,符号常量名通常用大写。变量其值可以改变,变量名只能由字母、数字和下划线组成,且第一个字符必须为字母或下划线。否则为不合法的变量名。变量在编译时为其分配相应存储单元。0 s8 k9 u/ o 3 整型数据 整型常量的表示方法:十进制不用说了,八进制以0开头,
28、如0123,十六进制以0x开头,如0x1e。 整型变量分为:基本型(int)、短整型(short int)、长整型(long int)和无符号型。不同机器上各类数据所占内存字节数不同,一般int型为个字节,long型为4个字节。% 8 _ f! a8 6 o3 l 4 实型数据 实型变量分为单精度(float)和双精度(double)两类。在一般系统中float型占4字节,7位有效数字,double型占8字节,1516位有效数字。 5 字符型数据 o, g( g7 b7 / r( m* a 字符变量用单引号括起来,如a,b等。还有一些是特殊的字符常量,如, 等。分别代表换行和横向跳格。2 e-
29、 x+ y5 u6 v u% f8 l/ x) a 字符变量以char 来定义,一个变量只能存放一个字符常量。 字符串常量是由双引号括起来的字符序列。这里一定要注意a和a的不同,前者为字符常量,后者为字符串常量,c规定:每个字符串的结尾加一个结束标志,实际上a包含两个字符:a和。5 d4 r4 g7 z( w( g6 b- k a 6 数值型数据间的混合运算5 a: n/ / d f0 ( h 整型、字符型、实型数据间可以混合运算,运算时不同类型数据要转换成同一类型再运算,转换规则: char,short - int - unsigned - long - double - float3 x-
30、 w2 y6 x q6 k- m3 b7 运算符和表达式7 l. i+ 6 n3 c( b. n4 z c运算符包括: 算数运算符( + - * / % ) # h8 ( s c6 n* l$ t # t; r 关系运算符( = = = != )) ( a) k/ x% m, a6 b 逻辑运算符( ! | ) 位运算符( | )4 a: x# q: d; u* v 赋值运算符( = ) 条件运算符( ? : ); o5 e: j2 x5 w1 y; y3 s9 y5 |5 l 逗号运算符( , ) 指针运算符( * ) 求字节数( sizeof ) 强制类型转换(类型)# r o5 p! t
31、; g q1 n g 分量运算符( . - ) a/ y2 h( o# n) q! * p 下标运算符( ) 其它运算符( 如函数调用运算符( ) )1 p/ / b. f, m, q b, r 自增自减运算符( + - )注意:+i和i+的不同之处,+i使用i之前先使i加,i+使用i之后,使i加。 逗号表达式的求解过程:先求解表达式,再求解表达式,整个表达式的值是表达式的值。+ v! k : r- a$ e) x7 i 1 i f- e5 , u 第三章 最简单的程序设计 c的种控制语句:7 f6 p9 _$ k: f9 e# o0 h9 t% n5 a if() else for()5 - w4 q8 g* l) h7 b while()
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1