1.字符:普通、转义、三字母

如图,三字母字符:

三字母字符
三字母字符

2.标识符不能以数字开头

否则,下句就混乱了:

1
int 2 = 2;

3.const

  • 只读变量 :非常量,在内存中;
  • 类型检查 :优于#define,主动进行不一致检查;
  • 保护修改 :避免手误赋值;
  • 函数重载 :c++;
  • 指针相关 :避免手误赋值;
    1
    2
    3
    4
    const int* p;	    //p可变,p指向的内容不可变
    int const* p; //p可变,P指向的内容不可变
    int* const p; //p不可变,p指向的内容可变
    const int* const p; //p,p指向的内容均不可变

4.枚举

默认从0开始,可以是负数;
默认+1,可以间接;

5.字符串

以NUL字节结尾,但并不属于字符串,并且占一个字节,如“Hello”在内存中占6个字节,H,e,l,l,o,和NUL;
NULL表示空指针;
NULL指向一个其值为0的指针。NULL和NUL都是整形,值也相同,所以他们互相可以换着使用;

6.typedef

用于给一个已经存在的数据类型重命名;

1
2
typedef char* ptr_to_char;//
ptr_to_char a; //声明a是一个指向字符的指针

数据类型重命名typedef优于define:后者无法正确处理指针类型;

1
2
#define d_ptr_to_char char*
d_ptr_to_char a,b;//a是指针,b是字符

7.赋值语句

下列语句中认为a和x被赋予相同的值是不正确的:

1
a=x=y+3

如果x是一个字符型变量,a和y是整型,那么a的值是截断后的值;

8.sizeof

操作符,字节;

sizeof(数组名)=n*sizeof(数组[0]);
sizeof(int);         //取决于环境
sizeof(a=b+1);

9.移位

有符号值的右移位操作是不可移植的;
移位操作的位数不能是负数(异常);

10.整型大小取决于环境

长整型至少应该和整型一样长,而整形至少应该比短整型一样长;

11.数组长度

当传递一个数组时,可以无需指定数组的长度(如果需要长度,则需要再增加一个长度的参数);

int  read(int a[], int len);

12.signed关键字

signed关键字一般只用于char类型,因为其他类型在缺省情况下都是有符号数;
至于char是否是signed,则因编译器而异。所以,char可能等于signed char,也可能等于unsigned char。