1. C语言中常量一般使用大写字母表示,如:
int →long
→ unsigned long
→
longlong
→
unsigned long long
→
float
→
double
→ longdouble
隐式类型转换都是低精度数据类型向高精度类型转换的,因此不会产生丢失信息的危险,相反,强制类型转换一般是要把高精度类型转换成低精度类型,存在丢失数据信息的危险。
无符号型比有符号型占用存储空间要大,因此在类型转换中它们之间的转换方向是:有符号类型向无符号类型转换。
int16_t表示一个16位的有符号整数类型,uint32_t表示一个32位无符号整数类型。
#define NAME Murphy
2.
用const修饰的标识符是只读变量不是常量,且仅在声明时做第一次初始化。
3.
隐式类型转换
记住:隐式转换都是“小”类型向“大”类型转换的。
4.
强制类型转换
语法格式: (数据类型)表达式
注:
5.为了让程序在不同位数的系统(如32位和64位)之间有较好的移植,可以使用“inttypes.h”头文件中的数据类型,如:
6. 系统默认为整型,在定义较大的数时要加L将其转为长整型,如:
#defineYEAR 31536000L
7. 最高优先级:[];();.;->;后++;后--
8.
自动数组
自动数组指未完全初始化的数组。如:
int a[5];// 完全没初始化,不是自动数组
int a[5] = {};// 未完全初始化,是自动数组
int a[5] = {1};// 未完全初始化,是自动数组
int a[] = {1,2,3};// 完全初始化,不是自动数组
9.字符指针也是字符串,即:
char*p 等价于 char p[]
故下面的程序成立:
char *p ="hello";
10.
char a[10] = “abcd”// abcd 存在数组(程序堆栈)内的,而
char *p = "abcd";// abcd 存在代码段(.text)中,是只读的,所以p叫做字符串常量。改变p的值是非法的,即:*p= "e"是错误的。
11.指针数组等价于二重指针,即:
char*P[3] <==> char **p
故下面的程序成立:
char *ps[3];
char **p =ps;
12.数组指针等价于二维数组,即:
char(*P)[3] <==> char p[][]
13.const 修饰符(read-only)
const修饰的变量只能做右值。
const修饰指针:const向右看,最靠近谁谁只读。
const char *p;//指针变量p本身可变,但p指向的内容是只读的
char const *p;//同上
char * const p;//p是只读的,但p指向的内容可变
const char * const p;//p及p指向的内容均为只读
date:2013-01-21~2013-01-23