C语言学习笔记(必看知识点)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 是一致的。
答:英特尔集成众核(Intel Many 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 语言中函数指针变量的详细介绍 答: 函数指针变量的作用:指向函数入口地址,用来调用函数。 使用函数指针的好处在于,可以将实现同一功能的多个模块统一起来标识,这样一来 更容易后期的维护,系统结构更加清晰。或者归纳为:便于分层设计、利于系统抽象、降低 耦合度以及使接口与实现分开。 函数指针变量定义的一般形式为: 类型说明符 (* 指针变量名 )(); 其中 " 类型说明符 " 表示被指函数的返回值的类型。 "(* 指针变量名 )" 表示 "*" 后面的变量是定义的指ቤተ መጻሕፍቲ ባይዱ变量。 最后的空括号表示指针变量所指的是一个函数。 例如申明函数指针变量:int (*pf)()或者 char * (*pf)(); 后者表示 pf 是一个指向函数入口的指针变量,该函数的返回值 ( 函数值 ) 是指针 型,指向字符串。 使用方法: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 和 Linux 平台的 c 编译器通常不包含此头文件。 如果需要使用此头文件,可以从互联网下载。 conio 库不仅适用于 Windows 平台,在 Linux 下也可使用.网上已经有兼容包,下载后打开 就可使用;而至于 Mac 则完全跟 Windows 没有区别,直接可以使用. 9. ++i 和 i++的效率的比较。 答: 简单的比较前缀自增运算符和后缀自增运算符的效率是片面的, 因为存在很多因素影响 这个问题的答案。以现在的编译器的优化水平, 在内建数据类型的情况下,效率没有区别。在自定义数据类型的情况下,++i 的效率较高。
答: 1.从内存上来讲 系统为指针分配内存空间, 而引用与绑定的对象共享内存空间, 系统不为 引用变量分配内容空间。 2 指针初始化以后可以改变指向的对象,而引用定义的时候必须要初始化,且初始化以后不 允许再重新绑定对象。 3.所以引用访问对象是直接访问。指针访问对象是间接访问。 4。如果 pa 是指针,那么*pa 就是引用了。又如 int a,&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 编码(American Standard Code for Information Interchange)基本的 ASCII 字 符集共有 128 个字符, 包括常用的字母、 数字、 标点符号等, 一个字节来存放一个 ASCII 字 符。 BIG-5 码:是通行于台湾、香港地区的一个繁体字编码方案,俗称“大五码” 。 GB2312 编码:对 ASCII 编码的扩充,收录简体中文和常用字符,通用于中国大陆。每个汉 字占用两个字节。基本集共收入汉字 6763 个和非汉字图形字符 682 个。对于人名、古汉语 等方面出现的罕用字,GB 2312 不能处理,这导致了后来 GBK 及 GB 18030 汉字字符集的出 现。 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 个字节 长。
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” 。 注意:条件编译的作用是防止此头文件被多个文件调用,产生编译冲突,这里的表示符为当 前头文件名的大写前加上_,如果头文件名为 err.h,则标示符为_ERR_H. 2. extern 关键字的用法。 extern 可以置于变量或者函数前,以表示变量或者函数的定义在别的文件中,提示编译器 遇到此变量和函数时在其他模块中寻找其定义。 另外,extern 也可用来进行链接指定。 3. sizeof 的结果等于对象或者类型所占的内存字节数。 4. snprintf()函数的用法。 答:函数原型 int snprintf(char *str, size_t size, const char *format, ...);功能 将可变个参数(...)按照 format 格式化成字符串, 然后将其复制到 str 中。 返回欲写入的字 符串长度,若出错则返回负值。 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?
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,那么就可以这么写 #ifdef WINDOWS a = 10; #endif #ifdef LINUX a = 20; #endif; 这样我只要在某个地方定义一个#define WINDOWS 或者#define LINUX 就可以在跨平台的情 况下采取不同的策略了. #undef 是在后面取消以前定义的宏定义 18. extern “C”修饰符的理解! 答:被 extern "C"修饰的变量和函数是按照 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#中变量生存期的区别! 答:应该从作用域的角度来区分变量的生存周期,生存周期分为三种: 整个程序:修饰的关键字有 static 当前文件(.c、.cpp、.cs 文件) :修饰的关键字有:C 语言:auto(自动变量) ,C++语言: private、protected、public 等,C#中:private、protected、public、partial 等。 当前程序段(if 语句段、函数体等) :修饰的关键字有:同当前文件 注:函数体外定义静态变量为全局静态变量,函数体内定义静态变量为局部静态变量,二者 生存周期都是整个程序。且 C 语言中没有私有和公有之分,C++扩充了这一个功能。 21.引用和指针的区别?
相关文档
最新文档