1.在C语言中,仅有4种基本数据类型:整型、浮点型、指针和聚合类型(如数组和结构等)。

整型家族包括字符、短整型、整型和长整型,它们都分为有符号和无符号两种。

标准规定整型值相互之间大小的规则:长整型至少应该和整型一样长,而整型至少应该和短整型一样长。

ANSI标准规定了各种整型值的最小允许范围,如下表所示:

类  型 最小范围
char 0~127
signed char -127~127
unsigned char 0~255
short int -32767~32767
unsigned short int 0~65535
int -32767~32767
unsigned int 0~65535
long int -2147483647~2147483647
unsigned long int 0~4294967295

枚举类型定义中的符号名被当作整型常量处理,声明为枚举类型的变量实际上是整数类型。但是,把枚举变量同整数无差别地混合在一起使用会削弱它们值的含义,实践中应尽量避免。

2.浮点数家族包括float(单精度)、double(双精度)和long double(扩展精度)类型。ANSI标准规定:long double至少和double一样长,而double至少和float一样长。标准同时规定了一个最小范围:所有浮点类型至少能容纳从10-37~1037之间的任何值。

浮点数字面值在缺省情况下都是double类型的,除非它的后面跟一个L或l表示它是一个long double类型的值,或者跟一个F或f表示它是一个float类型的值。

ANSI C标准声明如果对一个字符串常量进行修改,其效果是未定义的。在实践中,应尽量避免修改字符串常量。如果确需修改字符串,应将其存储于字符数组中。

3.在声明整型变量时,如果声明中已经至少有了一个其他的说明符,关键字int可以省略。

signed关键字一般只用于char类型,其他整型类型在缺省情况下都是有符号数。至于char是否是signed,则因编译器而异。

4.数组的下标总是从0开始的,最后一个元素的下标是元素的数目减1。

C编译器并不检查程序对数组下标的引用是否在数组的合法范围内。这种不加检查的行为有好处也有坏处。好处是不需要浪费时间对有些已知是正确的数组下标进行检查,坏处是这样做将使无效的下标引用无法被检测出来。

5.C语言支持一种叫做typedef的机制,它允许你为各种数据类型定义新名字。其声明格式与普通的声明基本相同,只是要把关键字typedef放在声明的前面。

实践中,通常应该使用typedef而不是#define来创建新的类型名,因为后者无法正确地处理指针类型。

6.const关键字涉及到指针变量的几种情况:

int  *pi;  //pi是一个普通的指向整型的指针

int const  *pci;  //pci是一个指向整型常量的指针。可以修改指针的值,但不能修改指针所指向的值。

int  *  const cpi;  //cpi是一个指向整型的常量指针。可以修改指针所指向的值,但不能修改指针的值。

int const  *  const cpci;  //cpci是一个指向整型常量的常量指针。指针的值和指针所指向的值均不能修改。

7.标识符的作用域就是程序中该标识符可以被使用的区域。编译器可以确认4种不同类型的作用域:文件作用域、函数作用域、代码块作用域和原型作用域。

标识符的链接属性决定如何处理在不同文件中出现的标识符。链接属性一共有3种:external、internal和none。没有链接属性的标识符(none)总是被当作单独的个体,也就是说该标识符的多个声明被当作独立不同的实体;属于internal链接属性的标识符在同一个源文件内的所有声明都指同一个实体,但位于不同源文件的多个声明则分属不同的实体;属于external链接属性的标识符不论声明多少次、位于几个源文件都表示同一个实体。

关键字extern和static用于在声明中修改标识符的链接属性。static只对缺省链接属性为external的声明才有改变链接属性为internal的效果。当extern用于源文件中一个标识符的第1次声明时,它指定该标识符具有external链接属性。但是,如果它用于该标识符的第2次或以后的声明时,它并不会改变由第1次声明所指定的链接属性。

变量的存储类型是指存储变量值的内存类型。有3个地方可以用于存储变量:普通内存、运行时堆栈、硬件寄存器。凡是在任何代码块之外声明的变量总是存储于静态内存中,也就是不属于堆栈的内存,这类变量称为静态变量。如果不指定其初始值,默认初始化为0。在代码块内部声明的变量的存储类型是自动的,它存储于堆栈中,称为自动变量。如果声明中加上关键字static,则它的存储类型变为静态。如果自动变量没有指定初始值,则其默认值为垃圾。关键字register可以用于自动变量的申明,提示它们应存储于机器的硬件寄存器而不是内存中,这类变量称为寄存器变量。

8.当static用于函数定义或代码块之外的变量声明时,它用于修改标识符的链接属性,从external改为internal,但标识符的存储类型和作用域不受影响。

当static用于代码块内部的变量声明时,它用于修改变量的存储类型,从自动变量修改为静态变量,但变量的链接属性和作用域不受影响。

《Pointers On C》读书笔记(第三章 数据)的更多相关文章

  1. 《C和指针》读书笔记——第三章 数据

    1.typedef:为各种数据类型定义新名字 typedef char  *ptr_to_char; ptr_to_char a;//声明a是一个指向字符的指针. 2.链接属性:extern;stat ...

  2. 《Linux内核设计与分析》第六周读书笔记——第三章

    <Linux内核设计与实现>第六周读书笔记——第三章 20135301张忻估算学习时间:共2.5小时读书:2.0代码:0作业:0博客:0.5实际学习时间:共3.0小时读书:2.0代码:0作 ...

  3. 《Linux内核设计与实现》读书笔记 第三章 进程管理

    第三章进程管理 进程是Unix操作系统抽象概念中最基本的一种.我们拥有操作系统就是为了运行用户程序,因此,进程管理就是所有操作系统的心脏所在. 3.1进程 概念: 进程:处于执行期的程序.但不仅局限于 ...

  4. 《CSS3实战》读书笔记 第三章:选择器:样式实现的标记

    第三章:选择器:样式实现的标记 选择器的魔力在于,让你完全实现对网页样式的掌控.不同的选择器可以用在不同的情况下使用.总之把握的原则是:规范的编码,根据合理地使用选择器,比去背选择器的定义有价值的多. ...

  5. 《linux内核设计与实现》读书笔记第三章

    第3章 进程管理 3.1 进程 1.进程 进程就是处于执行期的程序. 进程包括: 可执行程序代码 打开的文件 挂起的信号 内核内部数据 处理器状态 一个或多个具有内存映射的内存地址空间 一个或多个执行 ...

  6. 《R语言实战》读书笔记--第三章 图形初阶(二)

    3.4添加文本.自定义坐标轴和图例 很多作图函数可以设置坐标轴和文本标注.比如标题.副标题.坐标轴标签.坐标轴范围等.需要注意的是并不是所有的绘图函数都有上述的参数,需要进行验证.可以将一些默认的参数 ...

  7. .net架构设计读书笔记--第三章 第9节 域模型实现(ImplementingDomain Model)

        我们长时间争论什么方案是实现域业务领域层架构的最佳方法.最后,我们用一个在线商店案例来说明,其中忽略了许多之前遇到的一些场景.在线商店对很多人来说更容易理解. 一.在线商店项目简介 1. 用例 ...

  8. STL源码分析读书笔记--第三章--迭代器(iterator)概念与traits编程技法

    1.准备知识 typename用法 用法1:等效于模板编程中的class 用法2:用于显式地告诉编译器接下来的名称是类型名,对于这个区分,下面的参考链接中说得好,如果编译器不知道 T::bar 是类型 ...

  9. 深入Java虚拟机读书笔记第三章安全

    为什么需要安全性 Java的安全模型是其多个重要结构特点之一,它使Java成为适于网络环境的技术.Java安全模型侧重于保护终端用户免受从网络下载的.来自不可靠来源的.恶意程序(以及善于程序中的bug ...

随机推荐

  1. C#中的Attributes的用法

    今天研究了一下C#中的Attributes的用法,感觉很有用,现总结以下: 在前台用JS写的脚本方法,除了可以直接用在前台控件的属性中,还可以在后台运用. 即在后台页面加载时,调用JS方法.语法格式有 ...

  2. 20个命令行工具监控 Linux 系统性能

    对于每个系统管理员或网络管理员来说,每天要监控和调试 Linux 系统性能问题都是非常困难的工作.我已经有5年 Linux 管理员的工作经历,知道如何监控系统使其保持正常运行.为此,我们编写了对于 L ...

  3. Java中如何把两个数组合并为一个

    在Java中,如何把两个String[]合并为一个? 看起来是一个很简单的问题.但是如何才能把代码写得高效简洁,却还是值得思考的.这里介绍四种方法,请参考选用. 一.apache-commons 这是 ...

  4. cocos2dx3.3在Windows环境搭建以及新工程创建

    这个虽然比较简单,但是是学习cocos的第一步,不积跬步无以至千里,所以今天先分享Windows下环境搭建问题.关于mac搭建后续有机会在写(ps:因为我暂时没有mac),anyway,开始吧! 首先 ...

  5. 套接字编程(VC_Win32)

    简介(源于维基) Berkeley套接字(也作BSD套接字应用程序接口)刚开始是4.2BSD Unix操作系统(于1983发布)的一套应用程序接口.然而,由于AT&T的专利保护着UNIX,所以 ...

  6. 转:IIS请求筛选模块被配置为拒绝超过请求内容长度的请求

    HTTP错误404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求,原因是Web服务器上的请求筛选被配置为拒绝该请求,因为内容长度超过配置的值(IIS 7 默认文件上传大 ...

  7. linux c 头文件

    //1.Linux中一些头文件的作用: #include <assert.h> //ANSI C.提供断言,assert(表达式) #include <glib.h> //GC ...

  8. Cortex-M3 动态加载一(地址无关代码实现)

    这篇文章是自己疑惑究竟地址无关性是如何实现,然后查看汇编和CPU指令手册,最后分析解除自己疑惑的,高手不要鄙视,哈哈. 编译C代码时候需要制定--acps/ropi选项,如下例子: void Syst ...

  9. 19.java.lang.NoClassDefFoundException

    java.lang.NoClassDefFoundException未找到类定义错误 当Java虚拟机或者类装载器试图实例化某个类,而找不到该类的定义时抛出该错误. 违背安全原则异常:Secturit ...

  10. [原]命令模式在MVC框架中的应用

    其实在项目开发中,我们使用了大量的设计模式,只是这些设计模式都封装在框架中了,如果你想要不仅仅局限于简单的使用,就应该深入了解框架的设计思路. 在MVC框架中,模式之一就是命令模式,先来看看模式是如何 ...