strlen()返回size_t
size_t是 unsigned int类型
很多函数,如果确认不会返回小于0的值,那么就会使用size_t类型
size_t 和int兼容
字符串比较不能使用==比较 需要使用strcmp比较
strcmp相等返回0 否则返回非0(1,-1);
如果第一个参数的ASCII小于第二个参数,那么函数返回-1,如果相等返回0,否则返回1
#include 和 #define
#include就是简单的文件内容替换
#define 就是简单的文本替换
//头文件语法格式
//如果没有AH这个宏,那么久编译#endif之间的这些代码,如果有的话,就不编译了
#ifndef AH #define AH #endif
//防止多次include的同一个头文件的时候,重复预编译头文件内容
在#ifndef 中的宏,一定要大写和下线,必要的时候加数字避免和宏命名冲突
递归
函数自己调用自己,就叫函数的递归
递归分先序递归,和序递归
如果先序递归,那么代码是顺序执行的
如果是后序习惯,那么代码是逆序执行的
递归一定要有终止条件,不然会死循环
有时候递归可以替换循环。
指针
指针也是一个变量,指针存放的内容是一个地址,该地址指向一块内存空间
计算机的内存最小单位是Byte
每个Byte的内存都有一个唯一的编号,这个编号就是内存地址
编号在32位系统下是一个32位的整数
在64位系统下是一个64位整数
&操作符就是去变量地址的意思
int a = 0;
int *p =&a;//得到变量ad的地址,将这个地址赋值个变量p
地址虽然是一个整数,但地址是一个特殊的整数,是不能直接通过整数来操作的
int *p定义一个变量,变量名为p,他可以指向一个int的地址
指针变量的值一般不能直接赋值一个整数,而是通过取变量地址的方式赋值
*p的意思是指针变量指向内存的内容
*可以取指针存放地址所对应地址的内容
可以通过指针间接的修改指针存放地址的内容
无类型指针
定义一个指针变量,但不指定他指向具体的哪种数据类型。可以通过强制转化见void *转化为其他类型指针,也可以使用(void *)将其他类型指针强制转化为void类型指针
无类型指针,意思是这只是一个指针变量,而不指向任何具体的数据类型.
void *p = NULL //将指针赋值NULL,值为NULL的指针,我们俗称空指针
没有具体指向任何变量地址的指针叫野指针
程序中要避免也指针的存在,因为也指针是导致程序崩溃的主要原因.
//空指针是合法的,但野指针是危险的。
NULL在C语言中的定义为 (void *)0
-------------------------------------------------
An exciting trip
I have just received a letter from my brother,Tim.
He is in Australia.
He has benn there for six months.
Tim is an engineer.
He is working for a big firm and he has already visited a great number of different places in Australia.
He has just bought an Australian car and has gone to Alice Springs,a small town in the centre of Australia.
He will soon visit Darwin.From there,he will fly to Perth.
My brother has never been abroad before,so he is finding this trip very exciting.