数据类型
整型 (int)
分为
short int
int
long 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;)
可以使用转义符号
'\+八进制数字'
表示
存在以下特殊符号
\n
newline 换行\b
backspace\r
return\t
table 制表符
对于东亚字符所需的 (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;
("%f", lati);
printf("\n");
printf("%f", 39.908156f - lati);
printf
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
("REAL_CONST_VAR: %d\n", REAL_CONST_VAR); printf
在编译时使用了宏的对应位置会被替换,实际上宏不是变量,它并不存在,因此你在代码中无法修改它。此外,在任意位置你也可以取消你所设置的宏:#undef REAL_CONST_VAR
。
最后,C 语言中还有字面量这一概念,可以称之为真正的常量,例如
3
3u
3l
3.14f
'c'
"c 语言"
等。
运算符
在 C 语言中,一共有以下几种运算符:
赋值 (=)
int first = 0;
int second;
int third;
= second = first; // output 0 third
数学运算
对于加减乘除,分别为
+
、-
、*
、/
,取余数
%
。
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("%d\n", i);
printfif (i++ < 5) {
goto begin;
}
return 0;
在下一节中,我们将介绍 C 语言的函数与程序结构。