微课网站建设项目,申请网站空间有哪几种方式,地推的60种方法,建站工具哪个最好数据类型 1#xff0c;C语言中仅有四种基本数据类型——整型、浮点型、指针、聚合类型#xff08;数组、结构等#xff09;。
2#xff0c;整型包括字符、短整型、整型、长整型#xff0c;且可以分为有符号和无符号两种版本。 1#xff09;长整型至少和整型一样长#…数据类型 1C语言中仅有四种基本数据类型——整型、浮点型、指针、聚合类型数组、结构等。
2整型包括字符、短整型、整型、长整型且可以分为有符号和无符号两种版本。 1长整型至少和整型一样长整型至少和短整型一样长。大小由编绎器决定。
3设计char类型变量是为了容纳字符型值本质上是小整型值。 1缺省char是signed char或unsigned char取决于编绎器。 2不同编绎器取值范围不同不利于程序移植显式声明char为signed或unsigned可提高程序的可移植性可确保不同机器中字符符号值保持一致。 3但有些机器处理signed char比unsigned char高效并且处理字符的库函数参数声明为char显式声明unsigned或signed可能带来兼容性问题。 4当可移值问题比较重要时最佳方案将char型变量值限制在signed char和unsigned char交集内这样可获得最大可移植性同时不失效率。
4字面值即字面值常量指定值且不允许改变。 1字面值后添加L或l后缀表long整型添加U或u后缀表unsigned整型各添加一个表unsigned long整型。 2字面值缺省情况下是能完整容纳这个值的最短类型。
5字符常量是单引号包围的单个字符、转义字符、三字母词类型是int。 1多字节字符常量前L表宽字符常量。
6负数常量不是字面值常量而是常量表达式负号表单目操作符不是数值一部分。 7当字面值确定字中某些特定位的位置时写成十六进制或八进制更合适例0xF0等。 8枚举类型值为符号常量而不是字面值变量实际以整型方式存储。
9浮点类型通常以一个分数以及一个以某个假定数为基数的指数组成包括float、double、long double类型。 1表示浮点值的方法有很多标准未规定必须使用特定格式。 2标准规定long double至少和double一样长double至少和float一样长。 3标准规定了所有浮点类型至少能够容纳-1037到1037之间的值。
10C不存在字符串类型但提供了字符串常量一串以NUL字节结尾的零个或多个字符通常存储在字符数组中。 1字符串常量不允许修改程序中不同位置同一个字符串常量存储在同一个内存在某处修改字符串常量会影响其他位置字符串常量。 2当字符串常量出现在表达式中表示的是字符串存储的地址可以把字符串常量赋值给指向字符的指针但不能把字符串常量赋值给字符数组此时字符串常量并不代表字符本身。 3标准C函数库提供了一组操作字符串复制、连接、比较、计算长度、查找特定字符的函数。
声明 1声明说明符包含了关键字用于描述声明的基本类型。 1说明符也可以改变标识符的缺省存储类型和作用域例short、long、signed、unsigned。 2声明整型变量时声明中已经至少有了一个其他的说明符关键字int可以省略。 3signed一般用于char类型其他整型缺省情况下都是有符号数char是否是signed则由编绎器决定。
2声明一维数组需要指定数组元素个数编绎器不检查数组下标的越界实际编程中注意溢出。
3声明指针*紧跟变量名前一条语句声明多个指针每个变量名前紧跟*否则就变成指针指向的类型。 例 char *message “hello world”; 等同于 char *message; message “hello world”;
3函数如果不显式声明返回值类型默认返回整型省略形参类型时编绎器默认为整型。 4C语言支持typedef为数据类型定义新名称应用于复杂较长的声明并且修改一处所有生效。5#define不能正确处理指针类型需要使用typedef代替创建指针类型。 6使用const关键字声明常量常量不可修改声明时初始化声明为const的形参在函数调用时由实参初始化。
常量 1指针常量和常量指针。 1指针常量是指针本身是个常量声明时初始化不可修改指针指向可通过指针修改指向的内容。 2常量指针是指针指向的内容是常量可修改指针指向不可通过指针修改指向内容。
2#define也可以创建名字常量允许使用字面值常量的地方都可以使用define的名称代替但define没有类型检查。 3const变量只能用在允许使用变量的地方当常量应用于程序多处时修改一个名字常量比搜索整个程序修改字面值常量容易提高了程序的可维护性。
作用域 1编绎器确定4种不同类型的作用域文件作用域、函数作用域、代码作用域、原型作用域。
2代码块作用域即代码所在花括号的区域声明于内层代码块标识符的作用域在代码块尾部结束且内层代码块标识符隐藏外层相同名称的标识符无法通过名字访问外层相同名称的标识符。 1无重叠作用域的代码块可以共享同一块内存地址任何时刻最多只会有一个处于活动状态。 2函数形参的作用域是整个函数体声明于函数最外层作用域的局部变量不可与形参同名。
3声明于所有代码块之外的标识符具有文件作用域作用域起始于声明处终止于文件结尾。 1在文件中定义的函数也具有文件作用域函数不属于任何代码块。 2在头文件声明并#include到其他文件的函数具有其他文件的文件作用域作用域不仅限于头文件尾。
4原型作用域只适用于函数声明中的形参参数名字非必需且不必与函数定义中形参匹配也不必与函数调用中实参匹配。 5函数作用域只适用于语句标签goto语句函数中所有语句标签必须唯一。
链接属性 1程序中源文件编绎成目标文件链接器链接目标文件生成可执行程序不同源文件中相同标识符具有不同的链接属性。
2链接属性分为外部(external)、内部(internal)、无(none)。 1无链接属性的相同标识符为独立的实体。 2内部链接属性的相同标识符在同个源文件中指向同一个实体在不同源文件分属不同的实体。 3外部链接属性的相同标识符在不同源文件中表示同一个实体。
3关键字extern和static声明时可修改链接属性。 1具有外部链接属性的标识符声明时加上static则链接属性变为内部链接属性标识符为当前源文件私有static只对缺省为外部链接属性的标识符生效。 2extern作用于标识符的第一次声明时可指定标识符为外部链接属性如果用于该标识符的第2次及以后的声明不会改变该标识符第一次声明时static指定的链接属性当标识符具有文件作用域时可省略该关键字。
存储类型 1变量存储类型指存储变量值时的内存类型取决于变量的创建、销毁、保持通常存储在普通内存、运行时堆栈、硬件寄存器。 1声明于所有代码块之外的变量存储于静态内存程序运行之前创建在程序整个执行期间存在。 2代码块内部声明的变量缺省为自动变量存储在堆栈关键字auto修饰该存储类型但极少使用程序执行声明时创建变量离开代码块时销毁。 3关键字register用于自动变量声明存储变量于硬件寄存器。
2代码块内部变量声明时加上static则由自动类型变为静态类型修改存储类型不修改作用域只可在代码块内部按名字访问。 1函数形参不可声明为静态类型函数支持递归外层形参会被下一层调用修改。
3寄存器访问比内存访问高效但不能太多编绎器有一套寄存器优化方法可能忽略register关键字按普通自动变量处理。 1典型情况下将使用频率最高的变量声明为寄存器变量或将指针声明为寄存器变量可提高程序效率尤其是频繁执行间接访问的指针。 2寄存器变量创建和销毁时间和自动变量相同但需要做一些额外工作。 3当前使用寄存器变量的函数在返回前需要将寄存器的值恢复到函数调用之前使用运行时堆栈完成恢复进入函数前将所有使用的寄存器内容保存到堆栈函数返回时将堆栈内容恢复到寄存器。
初始化 1程序编绎时将静态变量初始值存储在静态内存程序加载后将静态内存中初始值赋值给静态变量。 1只需要初始化一次。 2静态变量初始化和使用不需要额外时间和额外指令。 3不显式指定初始值时默认初始化为0。
2自动变量初始化需要更多开销因程序链接时不确定自动变量的存储位置函数的局部变量每次调用可能占用不同的内存位置。 1自动变量没有缺省值需要显式的在声明时初始化或在使用前赋值。 2除了声明为const的变量必须初始化自动变量初始化和赋值无差别。 3函数内自动变量每次调用都需要重新初始化初始化在运行时执行可以用任何表达式作为初始化值。
static关键字 1当关键字作用于函数定义和代码块之外变量声明时static修改标识符的链接属性从外部链接修改为内部链接存储类型和作用域不受影响只能在当前源文件访问。 2当关键字作用于代码块内部变量声明时static修改变量存储类型从自动变量修改为静态变量链接属性和作用域不受影响程序执行前创建程序结束销毁。 3变量声明于代码块之外缺省具有外部链接属性所有源文件都可以访问变量声明于代码块内extern关键字表示引用全局变量而非声明局部变量。 4外部链接属性的变量具有静态存储类型程序开始前创建程序结束销毁。 5函数内部局部变量在函数开始时创建函数返回销毁但用于执行函数的机器指令在程序生命期内一直存在。
6局部变量不能被其他函数通过名字引用缺省情况下为自动存储类型使用时才分配内存可以减少内存总需求量。 1在堆栈分配内存可以有效实现递归。 2如果变量的值在多次调用中需要保存原先值或最终值可以修改存储类型为静态变量。