第3章 数据
- 学习笔记
- 书后练习
- 问题3
- 问题7
- 问题10
- 问题11
- 问题21
学习笔记
value = value - '0';
通常用于将字符转换为其对应的整数值enum Jar_Type { CUP, PINT, QUART, HALF_GALLON, GALLON };
这些符号名的实际值都是整型值,例如,CUP
是0,PINT
是1。enum Jar_Type { CUP = 8, PINT = 16, QUART = 32, HALF_GALLON = 64, GALLON = 128 };
只对部分符号名用这种方式进行赋值也是合法的。如果某个符号名未显式指定一个值,那么它的值就比前面一个符号名的值大1- C语言存在字符串的概念:它就是一串以
NUL
字节结尾的零个或多个字符。字符串常量(不像字符常量)可以是空的,尽管如此,即使是空字符串,依然存在作为终止符的NUL
字节 signed
关键字一般只用于char
类型,因为其他整型类型在缺省情况下都是有符号数。所以,char
可能等同于signed char
,也可能等同于unsigned char
,因编译器而异- 在C语言中定义指针时,
*
可以靠近数据类型也可以靠近标识符。但是最好的使用方式还是靠近标识符。例如,int* a, b, c;
很容易让人误解声明了三个指向整型的指针,但是其实只对标识符b
有效,如果要声明三个指向整型的指针,可以int *a, *b, *c;
这样表达 - 函数的形式参数不能声明为静态,因为实参总是在堆栈中传递给函数,用于支持递归
书后练习
问题3
假定你正编写一个程序,它必须运行于两台机器之上。这两台机器的缺省整型长度并不相同,一个是16位,另一个是32位。而这两台机器的长整型长度分别是32位和64位。程序所使用的有些变量的值并不太大,足以保存于任何一台机器的缺省整型变量中,但有些变量的值却较大,必须是32位的整型变量才能容纳它。一种可行的解决方案是用长整型表示所有的值,但在16位机器上,对于那些用16位足以容纳的值而言,时间和空间的浪费不可小视。在32位机器上,也存在时间和空间的浪费问题。
如果想让这些变量在任何一台机器上的长度都合适的话,你应该如何声明它们呢?正确的方法是不应该在任何一台机器中编译程序前对程序进行修改。提示:试试包含一个头文件,里面包含每台机器特定的声明。
// platform_types.h#ifndef PLATFORM_TYPES_H
#define PLATFORM_TYPES_H#include <stdint.h>#if defined( __16BIT_MACHINE__ )// 对于16位的机器typedef int16_t int_var;typedef uint16_t uint_var;typedef int32_t large_int_var;typedef uint32_t large_uint_var;
#elif defined( __32BIT_MACHINE__ )// 对于32位机器typedef int32_t int_var;typedef uint32_t uint_var;typedef int64_t large_int_var;typedef uint64_t large_uint_var;
#else#error " Unsupported platform "
#endif#endif // PLATFORM_TYPES_H
有没有人有更好的见解呢?
问题7
下列代码段会打印出什么东西?
enum Liquid { OUNCE = 1, CUP = 8, PINT = 16, QUART = 32, GALLON = 128 };
enum Liquid jar;
...
jar = QUART;
printf( "%d\n", jar );
jar = jar + PINT;
printf( "%d\n", jar );
32
48
问题10
一个无符号变量可不可以比相同长度的有符号变量容纳更大的值
可以的
举个例子 8bit长度的char数据类型
无符号char 0 ~ 255
有符号char -128 ~ 127
但是两者能容纳的数据量是一样的,都是256
问题11
假如int和float类型都是32位长,你觉得哪种类型所能容纳的值精度更大一些?
int类型所能容纳的值精度更大一些
int类型只有一位符号位
float类型除了一位符号位外,还需要给指数留几位,所以int类型所能容纳的值精度更大一些
但是float类型能够表示的数据范围更大
问题21
假定一个函数包含了一个自动变量,这个函数在同一行中被调用了两次。试问,在函数第二次调用开始时该变量的值和函数第一次调用即将结束时的值有无可能相同?
自动变量就是函数的局部变量
如果函数对该变量的值进行了修改,则函数第二次调用开始时和函数第一次调用即将结束时的该变量的值很难相同
因为第二次调用函数时该变量又被重新初始化了