感悟《C和指针》——3.数据
来源:互联网 发布:谷歌数据备份 编辑:程序博客网 时间:2024/06/07 07:15
所有的程序都对数据进行操作,本章对数据的各个方面进行了描述。特别是变量的三大属性——变量的作用域、链接属性和存储类型决定了变量的“可视性”和“生命期”。
1.基本数据类型 C语言的基本数据类型包括整型、浮点、指针和聚合类型。
(1)整型家族。整型家族包括字符(char)、短整型(short int)、整型(int)、长整型(long int)和枚举类型(enum)。其中前四种类型还分为有符号型(signed)和无符号型(unsigned),而且每种数据类型根据是否有符号以及数据类型的长度决定了它所表示的整数的取值范围,一般说来是short int <= int <= long int。在头文件limit.h中存放有各种数据类型最大值和最小值的宏定义常量,如INT_MAX等。枚举类型是用户自定义变量的一种方式,它的值为符号常量而不是字面值,这种类型的变量实际上是整型值,我们可以对符号常量进行显式的赋值。
关于整形字面值:定义的整型字面值可以指定类型和进制。如17380UL指定无符号长整型数,0xcafe指定十六进制值。
(2)浮点数家族。浮点数家族包括浮点型(float)、双精度(double)和长双精度(long double),三者表示的浮点数范围的关系是:float <= double <= long double。
(3)指针类型。这里要区分“指针”和“指针变量”的区别,“指针”其实就是“内存地址”,而指针变量是存放其他变量内存地址的变量。内存地址是没有类型的,而指针变量就好像一种“过滤器”或者说“有色眼镜”,你用不同的指针变量去"看"某段内存地址的值,看到的就是不一样的,用char*看见的是1字节的字符,用int*看见的是4字节的整数。
(4)聚合类型。聚合类型就是指结构体(struct)和共用体(union)两种结构。
2.基本声明
声明的形式就是“一个或多个说明符 声明表达式列表”。可以在声明的同时初始化,要小心不要对任何变量或者函数造成隐式声明。
3.typedef
typedef用于为数据类型指定新的类型别名,typedef在结构体的定义上用的最多,比如 typedef struct node_t { int value; struct node_t *next;} node;此后我们就可以使用node来定义节点类型。
4.常量
C语言中使用“const”关键字来定义常量类型。常量类型既然是不可更改的对象,那么它们就必须在声明时初始化。const形参在函数调用时得到实参值。这个技巧常用于函数的定义,当用户查看函数声明时,立刻就可以明白它的意图——常量参数是不会被误更改的。
const和指针联系起来时往往有令初学者费解的表示形式,阅读这类声明的诀窍就在“*”上,把星号前后的内容分开来读就能明白了,举例:
int *pi; 指向整形变量的指针;
int const *pci; 指向整型常量的指针(pci可以修改,*pci不可修改);
int* const cpi; 指向整型变量的常指针(cpi不可以修改,*cpi可以修改);
int const *const cpci; 指向整型常量的常指针(cpci和*cpci都不可以修改)。
字符串字面值:字符串字面值是以‘\0’结尾的字符序列,它的值是 一个指向该字符串第一个字符的地址的常量指针,故“abcdefg”[6]值为‘g’。
5.作用域
变量声明的位置决定了变量的作用域,作用域包括:文件作用域、函数作用域、代码块作用域和原型作用域。
(1)文件作用域。文件作用域定义于所有代码块之外,表示该变量在声明处一直到该文件结尾都有效。
(2)函数作用域。一个函数的所有语句标签(用于goto语句)必须唯一。
(3)代码块作用域。定义在“{}”之间的变量具有该代码块的作用域,而且这些变量会覆盖代码块外的同名变量。
(4)原型作用域。原型作用域适用于在函数原型中声明的参数名。
6.链接属性
变量有三种链接属性:外部(external)、内部(internal)和无属性(none)。
(1)external属性。指多个源文件中的多个声明对应同一个实体。
(2)internal属性。指同一源文件内所有声明同属于一个实体,不同源文件内多个声明对应多个不同实体。
(3)none属性。指每个声明都对应不同的实体
7.存储类型
变量的存储类型(storage class)是指存储变量的内存类型。变量的存储类型决定变量何时创建、何时销毁以及它的值将保持多久。有三个地方可以用于存储变量:运行时堆栈、硬件寄存器和普通内存,分别对应着三种存储类型:自动变量(auto)、寄存器变量(register)和静态变量(static)。
(1)自动变量。自动变量定义于代码块内部,它在代码块的结束位置自动被系统清除回收。
(2)寄存器变量。寄存器变量是一种特殊的自动变量,它没有内存地址,其值直接存储于寄存器中,它的初衷是为了提高频繁被访问变量的存取效率,不过这种变量的效率还是决定于编译器。
(3)静态变量。声明于所有代码块的外部,它具有静态属性,并会被编译器在调用main函数之前初始化(通常为0),函数调用时仍然保持前一次调用的值。
8.static关键字
static关键字对链接属性原本为external的标识符具有修改链接属性(为internal)的效果,而对其他属性的标识符则是起到修改存储类型(静态)的作用。
0 0
- 感悟《C和指针》——3.数据
- 感悟《C和指针》——2.基本概念
- C和指针读书笔记——数据
- c和指针_小感悟
- C和指针 学习笔记——第三章 数据
- c的一些学习感悟(字符变量和字符指针)
- C和指针读书笔记——指针
- 《c和指针》摘录4—指针
- C语言指针高级部分:void指针和数据指针
- C/C++——引用和指针
- C/C++——常量指针和指针常量
- 《C和指针》——C语言补漏(指针篇)
- C数据结构设计中,表首结点和二叉树根结点的头指针——传指针还是传指针的指针?
- C和指针读书笔记——使用结构和指针
- c和指针——指针和const
- 《c 和指针》第9章第12题——加密数据
- 《C和指针》学习记录——第3章数据_常量
- 《C和指针》学习笔记 数据对齐
- 为Redmine的项目加上起止时间
- 数据库查询优化技巧准则
- weblogic9.2 重置密码
- java排列组合算法代码实现
- 解决“System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本”
- 感悟《C和指针》——3.数据
- Windows系统三种定时器的分析
- [Android][转]android中string.xml中%1$s、%1$d等的用法
- 隐式Intent
- 广州趣炫笔试题
- android之android.intent.category.DEFAULT的用途和使用
- SVD在推荐系统中的应用
- 获取下拉选的值
- 关于Unicode字符集