大小写
C语言是大小写敏感的,包括
- 预定义的关键字
- 用户自定义的变量
ASCII字符集
C语言的语法使用ASCII字符集的低128个字符。由于UTF8在前128个字符中与ASCII是一致的,所以也可以使用。
因此,这个有效字符集以外的字符只能出现在字符串或注释中。如果使用128个字符以外的字符,必须考虑到以下因素。
- 标准C库的字符串功能只考虑为常规字符集,因此,例如,搜索或转换可能会失败。
- 字符串经常与printf结合使用。这里使用的字符集应与终端仿真中使用的字符集相同。
注释块
/**/和//
数据类型与类型安全
c语言中可能的数据类型:
数据类型 | 指针 |
---|---|
integer | int * |
float | float * |
funktion | (*)() |
arrays | (*)[] |
struktur | * |
关于数据类型转换,适用以下规则:
- 从整数到浮点数,浮点数到整数,这样的类型转化是不安全的,因为这里编译器应用了隐含的规则。
- 对于所有其他类型,类型转化是安全的,但至少会报告一个编译器警告。
- 但是,通过显式转化数据类型可以被 “转换”。如果你不知道你在这里做什么,请不要这样做!
编译器经常对此给出警告或错误。
String
字符串不作为一个单独的数据类型存在。它通过数据类型为Char的数组表示。
Char string[]="Hello world"
字符串以字符串结束字符0或’\0’结束。因此,必须为此保留额外的内存空间。
一些字符串操作函数:
- strcpy(char *dest, const char *src) -> 把 src 所指向的字符串复制到 dest。
- strcat(char *dest, const char *src) -> 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。
- strlen(const char *str) -> 计算字符串 str 的长度,直到空结束字符,但不包括空结束字符。
- strcmp(const char *str1, const char *str2) -> 如果返回值小于 0,则表示 str1 小于 str2。
如果返回值大于 0,则表示 str1 大于 str2。 - strtok(char s[], const char *delim) ->
作用:分割字符串
使用方法:当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针。
#include<string.h>
#include<stdio.h>
int main(void)
{
char input[16]="abc,d";
char*p;
p=strtok(input,",");
if(p)
printf("%s\n",p);
p=strtok(NULL,",");
if(p)
printf("%s\n",p);
return 0;
}
Bool
-
== 0 False
!= 0 True -
在if/while语句中
if(a) 等同于 if(a!=0)
if(!a) 等同于 if(a == 0) -
布尔运算符可以和所有整数操作相结合,比如:a+1 && 7 << 3 & 7
逻辑运算符
&& 与 ;|| 或
符合惰性规则
常量
整形常量
一般来说,编译器为数字整数常数分配最小的数据类型,从int开始。然而,一旦它的值超过了整数数据类型所能容纳的范围,编译器就会将其修改为下一个更大的数据类型。举例:
- 123
- +123
- -123
- 0x123 // 十六进制
- 0123 // 八进制
- 5123123123 // 长长整型
用L和LL可以将一个数据强制转化为长整型和长长整型 - 12L // 长整型
- 4711LL // 长长整型
用U可以将一个数据强制转化为unsigned(无符号化) - 12U
- 4711ULL
Char 常量
转义字符:
- ‘\n’ -> 换行
- ‘\’ -> 斜线
- ‘\t’ -> 一个制表符
- ‘\b’ -> 退格
- ‘\r’ -> 回到当前行行首
- ‘\0’ -> 字符串结束符
- ‘\f’ -> 换页
- ‘\ooo’ -> 八进制
- ‘\xdd’ -> 十六进制 von 0…9 A…F sind
- ‘\udddd’ -> 四位数Unicode
- ‘\Udddddddd’ -> 八位数Unicode
举例:‘A’ == ‘\101’ == ‘\x41’ == ‘\u0041’ == `’\U00000041’
浮点数
所有的浮点数数据类型都是