数据类型
整型 (int)
分为
short intintlong int,以及喜闻乐见的long long存在 short int < int < long int < long long
C 语言与较新的语言不同,提供了不同类型的整型方便你分配,而非普通的
int long 等。
在不同操作系统或不同编译器下,整型的大小不同,C 语言标准只约束了其最小位数。一般地,下列类型也是如此。
对应的,还有无符号整型,即最小值为 0 的整型。只需在数据类型前加上
unsigned 就会变成无符号整型,如 unsigned int。
特殊的,在不同平台中存在 size_t 这一类型,对于 mingw 为
__int64。
字符 (char)
为 ASCII 字符集,本质上为整数类型 (即可以 char i = 1;)
可以使用转义符号
'\+八进制数字'表示
存在以下特殊符号
\nnewline 换行\bbackspace\rreturn\ttable 制表符
对于东亚字符所需的 (Unicode) 使用字符表示,使用
wchar_t,且在字符变量前加上 L。
如 wchar_t cnChar = L'你好世界';,通常称为宽字符,在 C95
后引入。
字符串则使用双引号,如 char *string = "字符串";。
同样的,对于 Unicode 也存在转义符号形式,如
wchar_t unicode = L'\u4E2D';。
浮点型
存在
float与double两种形式,分别为单精度和双精度。float (±10^37, 六位有效数字),double (-1.0E37-1.0E+37,15~16位有效数字)
例如表示北京的纬度
#include <stdio.h>
int main() {
float lati = 39.90815f;
printf("%f", lati);
printf("\n");
printf("%f", 39.908156f - lati);
return 0;
}得到结果
C:\Users\NatsuYuki\CLionProjects\untitled\cmake-build-debug\untitled.exe
39.908150
0.000008
Process finished with exit code 0相减的结果与我们的常识显然不符。这是因为 float 的有效位只有六位,后面位数均为非精确位,运算中存在精度损失。
变量与内存地址
关于变量的概念不再多做阐述,此处仅介绍内存地址。
使用 sizeof(var) 查询该变量的大小、&var
取变量的内存地址。内存地址同样也是整数类型,且不唯一。
对于变量的命名,与 Java 所喜欢的驼峰式不同,在 C
语言中推荐你使用下划线分割变量名,例如 i_am_a_var。
常量
在 C 语言中,在变量类型前添加 const
即可定义不可变变量。
虽然设计上不可变,但我们仍然可以通过指针操作这个变量,例如:
const int const_var = 1;
int *p_const_var = &const_var;
*p_const_var = 2;有点类似于 Java 中通过反射修改常量的感觉,实际上 const 只是个只读变量,有权限时你依然可以修改它 (通过指针)。
无独有偶,C 语言中还存在除 const 外的常量设计——宏 (macro):
#define REAL_CONST_VAR 114514
printf("REAL_CONST_VAR: %d\n", REAL_CONST_VAR);在编译时使用了宏的对应位置会被替换,实际上宏不是变量,它并不存在,因此你在代码中无法修改它。此外,在任意位置你也可以取消你所设置的宏:#undef REAL_CONST_VAR。
最后,C 语言中还有字面量这一概念,可以称之为真正的常量,例如
3 3u 3l 3.14f
'c' "c 语言" 等。
运算符
在 C 语言中,一共有以下几种运算符:
赋值 (=)
int first = 0;
int second;
int third;
third = second = first; // output 0数学运算
对于加减乘除,分别为
+、-、*、/,取余数
%。
i++ 改变自身值,不返回。++i 反之。
存在 +=、-= 等运算赋值符。
逗号运算符 x = x * 2, x = x + 3;,不推荐使用。
条件控制与移位
&(按位与) 相同为 1,不同为 0.|(按位或) 有 1 为 1,全 0 为 0.^(按位异或) 不同为 1,相同为 0.~1 得 0,0 得 1.<<左移位,>>右移位.
三元运算符
与 Java 中一致:
bool is_new_season;
int person_count = is_new_season ? 9 : 5;语句
switch 语句
与 Java 中大致一致:
switch (condition) {
case 0:
// do something
break;
case 1:
// do something
break;
default:
// do something
}循环语句
- while 与 do while
与 Java 中一致:
while (condition) {}
do {
// do something
} while (condition) {}- for
与 Java 中一致,例如:
for (int i; i < 5; i++) {
// do something
}同样的,也存在 continue 与 break 语句。
goto 跳转
不推荐使用。
int i = 0;
begin:
printf("%d\n", i);
if (i++ < 5) {
goto begin;
}
return 0;在下一节中,我们将介绍 C 语言的函数与程序结构。