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. ShowDialog()弹出的窗体,关闭后,主窗体会闪烁的BUG

    如图,要实现下列等待界面时,等待界面是以ShowDialog弹出的,发现关闭后,主窗体会闪烁一下的BUG,搞半天没搞明白啥原因. 过了几天后,搜索了下发现,在fm.ShowDialog(),显示出来时 ...

  2. mysql获取各种日期

    select curdate(); --获取当前日期 select last_day(curdate()); --获取当月最后一天. select DATE_ADD(curdate(),interva ...

  3. function(ev) //括号里的ev是什么东西,什么意思?

    事件对象: 楼上的不要误导新人 ev是我们获取事件详细信息的event是IE的写法 大多数人是写window.event 其实区别也差不多 好像window.event更安全些 我也不记得了 火狐呢 ...

  4. Centos 升级MySQL版本或者Yum安装Mysql5.6

    Centos 升级MySQL版本或者Yum安装Mysql5.6 1.从MySQL Yum仓库下载最新的rpm文件:http://dev.mysql.com/downloads/repo/yum/Cen ...

  5. 柯南君:看大数据时代下的IT架构(8)消息队列之RabbitMQ--案例(topic起航)

    二.Topic(主题) (using the Java client) 上一篇文章中,我们进步改良了我们的日志系统.我们使用direct类型转发器,使得接收者有能力进行选择性的接收日志,,而非fano ...

  6. Codeforces 707D Persistent Bookcase(时间树)

    [题目链接] http://codeforces.com/problemset/problem/707/D [题目大意] 给出一个矩阵,要求满足如下操作,单个位置x|=1或者x&=0,一行的数 ...

  7. 关于iOS7越狱的整理

    目前越狱非常的不稳定,已经白苹果第三次了.中途遇见了不少问题,去各大论坛找了下解决办法,算是搬运工. iOS7越狱过程中打开手机上的“evasi0n7”闪退,怎么办?1. 请先尝试卸载手机“evasi ...

  8. 编译时出现clock skew detected, your build may be incompeleted

    错误原因为文件修改时间大于系统时间,这时候如果date输出系统时间,会发现这个时间是错误的.在nachos实习时多次出现这个错误,简单的方法尝试make多次直到有一次出现'nachos' is up ...

  9. 强制杀oracle进程

    强制杀oracle进程: for p in `ps -ef| grep ora| awk '{print $2}'`;do kill -9 $p;done 修改 oracle xe 默认中文字符集成为 ...

  10. 【转】Python3.x移除了callable内建函数

    原文地址:http://www.cnblogs.com/elvisxu/archive/2010/10/26/1861958.html 最近学习Python的时候,在Python3下跑<Dive ...