C和指针笔记---数据(1)
来源:互联网 发布:域名信息查询 编辑:程序博客网 时间:2024/05/16 15:47
本笔记对相关模糊问题的分析主要集中于K&R C和ANSI C两种标准之间。
(一)基本数据类型
变量三个属性:作用域,连接属性和存储类型。
C语言中只有四种基本类型:整型,浮点型,指针和聚合类型(数组和结构等)
整型家族
长整型至少应该和整型一样长,整型至少应该和短整型一样长。
程序的可移植性与数据有无符号
缺省的char类型是否有符号取决于编译器,这意味着不同机器上的char可能拥有不同范围的值,因此,只有当程序所使用的char型变量的值位于signed和unsigned值的交集中时,这个程序才是可移植的。如ANSI中的字符均位于这个范围之内。
整型字面值
字面值指的是字面值常量,并且不允许改变。如const常量,它类似于普通变量,区别在于它不能改变,但它不同于define宏。
整型字面值类型取决于它是怎么定义的。在缺省情况下,数字字面值的类型就是整型的9种类型中最短但足以容纳整个值的类型。
字符常量的类型总是int,你不能在后面添加unsigned或long后缀。字符常量是指单引号包围的单个字符或者字符转义序列或三字母词,如‘M’、’\n‘、’??(‘、’\377‘
(\ddd 1~3位八进制数所代表的字符;\xhh 1~2位十六进制数所代表的字符)
浮点类型
浮点数家族包括float、double和long double三类,没有long float这种类型!
ANSI仅规定:long double至少和double一样长,而double至少和float一样长。同时规定所有的浮点类型至少容纳从10-37至1037之间的任何值。
指针
这里先说下指针常量,以后关于指针的话题会更多。
指针常量和非指针常量本质上就是不同的,这是因为指针常量的值是编译器决定的,每次运行程序的时候都可能不同。
程序员事先可以确定知道某个特定变量的值,但是却无法确定其存放在内存中的位置。
字符串常量
C语没有提供类似 int 的字符串类型,但是提供了字符串常量。事实上,在C语言中,它是指一串以NUL字节(不是NULL)结尾的零个或多个字符。字符串通常存储在字符数组中,这就是C没有字符串类型的原因。\
NUL字节不能存在字符数组内部。它是一个不可打印字符。
字符串是否能修改取决于编译器,可以通过设置编译选项自行选择是否可修改,但是在实践中这样做是很危险的,如果想修改字符串就存储在数组中,如下:
char str[] = "hello!";
这条语句,该语句是按照数组的形式来一个个存放的,编译器将其解释为char str[] = {'s','t','r','i','n','g','/0'}; 如果在函数内部出现的话,这几个字符将存放在堆栈中,所以不是字符串常量。
char *pstr = "hello!";
这条语句,该语句定义了一个指向"pstr"字符串的指针,并没有空间存放"pstr"字符串,显然把“pstr”当做字符串常量并存放在常量区是最合适的选择。并且语句 psz[4] = 'x'; 在编译时不会报错,执行时会产生异常,原因是“string”存放在只读存储区,不可以修改。
这和C++中 const char *psz = "string";一句是一样的,所以最好显示的加上const关键字从而让编译器检测出“修改常量“错误,这样就可以提前修改。
字符串常量出现在一个表达式中时,表达式所用的值其实是这些字符所存储的地址,而不是这些字符本身。因此可以把这个字符串常量赋值给另一个“指向字符的指针”,而不能赋值给一个数组,因为字符串常量的直接值是一个指针。
- C和指针笔记---数据(1)
- 《C和指针》学习笔记 数据对齐
- C和指针笔记---数据(2)
- 《C和指针》阅读笔记--数据
- 《C和指针》笔记1
- 《C和指针》学习笔记二/基本概念和数据/
- 《c和指针》笔记
- C和指针笔记
- 《C和指针》笔记
- c 和 指针(笔记)
- C和指针笔记
- 《C和指针》笔记
- 《C和指针》笔记
- C和指针笔记
- C和指针 学习笔记——第三章 数据
- 《c和指针》 第三章 数据(1)
- C和指针学习笔记(1)
- C和指针学习笔记 (1)
- ecnu 1600 公路巡逻 (黑书上的DP)
- 超链接a标签的href与onclick中使用javascript的区别
- 项目总结一:多进程还是多线程?
- 2440学习(二)—— uboot学习
- iOS开发视频教程—第四章Foudation框架介绍的源代码和课件下载
- C和指针笔记---数据(1)
- 判断三角形类型
- pin planner的all pin list 中只剩下Node Name,不见了Location ,Direction
- 秒杀多线程第四篇 一个经典的多线程同步问题
- Source Insight 切换工程, 异常出错的解决办法.
- myeclipse打war包
- 关于启动Linux时出现Error $15的问题
- (转载)展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告----
- drupal记录用户密码