C语言是一种结构化的程序设计语言
空格的ASCII码值是32,空格是属于可打印字符
\0是字符串结束的标志,字符串的末尾隐藏了一个\0
printf()
在打印字符串或者strlen
在计算字符串长度的时候,遇到\0
的时候就自动停止。
strlen
返回的值是size_t
类型的,应该使用%zd
进行打印
C语言中支持一种东西,叫三字母词,以前的编译器会支持三字母词,但现在的编译器基本上都不支持了
三字母词是以??
开始加一个其它的符号,比如说??)
–>]
, ??
(–>[
举例说明:
int main() { printf("(are you ok??)");//这个输出的结果是(are you ok] return 0; } //如果想让这里的'?'不再是三字母词里的问号,就可以用转义字符'\?',例如这里写为printf("(are you ok\?\?)");
有两种非常奇葩的转移字符,下面两种转义字符可以理解为:字符的八进制或者十六进制表示形式
\ddd
: d d d 表示1~3个八进制数字。 如:\130
表示字符x\xdd
: d d表示两个十六进制数字。 如:\x30
表示字符0\0
:null 字符,代表没有内容,\0
就是\ddd
这类转义字符的⼀种,⽤于字符串的结束标志,其
ASCII码值是0.
\b
这个转义字符,光标回退一个字符,到底会不会删除字符????????
编译时,注释会被替换成⼀个空格,所以 min/*
这⾥是注释*/Value
会变成 min Value
,⽽不
是 minValue
,也就相当于删掉了。
编程是为了解决生活中的问题,计算机语言来写代码——得有能力描述生活中的问题,那么生活中有那么多数据,因此C语言中有许多的数据类型。
1个二进制位的存储需要一个bit位的空间
1KB = 1024Byte 1024=2的10次方
C语言标准规定:
sizeof(long) >= sizeof(int)
,所以说sizeof(long)
可能是4也可能是8,看不同的编译器。
并且sizeof(long double) >= sizeof(double)
这个也是这样。
数据类型就相当于模具,sizeof
的单位是字节
sizeof
的计算结果是 size_t
类型的。
📌 sizeof
运算符的返回值,C 语⾔只规定是⽆符号整数,并没有规定具体的类型,⽽是留给
系统⾃⼰去决定, sizeof
到底返回什么类型。不同的系统中,返回值的类型有可能是
unsigned int
,也有可能是 unsigned long
,甚⾄是 unsigned long long
,
对应的 printf() 占位符分别是 %u
、 %lu
和 %llu
。这样不利于程序的可移植性。
C 语⾔提供了⼀个解决⽅法,创造了⼀个类型别名 size_t
,⽤来统⼀表⽰ sizeof
的返
回值类型。对应当前系统的 sizeof
的返回值类型,可能是 unsigned int
,也可能是
unsigned long long
。
sizeof
中如果放的是表达式,表达式不会真实计算!
char ---- char 到底是有符号还是无符号呢? 这个不确定,是取决于编译的实现,大部分编译器上char就等价于signed char
signed char
unsigned char
int 是有符号还是无符号呢?
int 就是等价于signed int, short也是等价于signed short, long也是等价于signed long, long long也是等价于signed long long
signed int
unsigned int
创建变量的同时给它一个值,这叫初始化。而已经有了变量以后给它值,这个叫赋值,这是两码事。
在C语言中,直接给一个小数,例如:3.14
这个会默认为double
类型,而像3.14f
这样写,就认为是一个float
类型了。
当全局变量和局部变量名字相同的时候,局部变量优先。
c = b = a+3;
像这种连续赋值,是从右向左依次赋值的。
C语⾔虽然⽀持这种连续赋值,但是写出的代码不容易理解,建议还是拆开来写,这样⽅便观察代码的
执⾏细节。
int main() { int a = (int)3.14; printf("%d\n", a); return 0; }
这个强制类型转换就是把整数留下来,把小数部分直接就丢了。
函数不写返回类型,编译器会默认函数返回类型为一个int整型。
如果函数要求返回值,但函数中没有使用return返回值,那具体返回什么就不确定。