函数
1.1什么是函数
1.2函数的定义
1.3函数的格式
返回值类型 函数名(形式参数列表)
{
函数体
}
1.4函数的调用
1.5函数的参数
1.6C语言中函数的弱语法
1.7函数的声明与实现的关系
1.8C语言多文件的编译方法
1.8.1为什么要用多文件?
1.9#include用法
1.10函数的注意
1.默认情况下,不允许有函数的名称一样
2.函数不能嵌套定义
3.函数不能重复定义,但是可以重复声明
4.如果有函数的声明,没有函数的定义
1> 编译可以通过,因为编译器只会检测语法合不合理,并不会检测函数有没有定义
2> 链接报错,因为链接的时候会检测函数是否定义
数组
2.1数组的基本概念
2.2数组的定义
2.3数组的初始化
2.4常见错误
二维数组
3.1什么是二维数组?
3.2二维数组的初始化
字符串
4.1什么是字符串?
4.2字符串的初始化
4.3常用字符串处理函数
4.4字符串使用注意
\0的作用
1.字符串结束的标记
2.printf("%s", name2);
会从name2这个地址开始输出字符,直到遇到\0为止
字符串数组
5.1使用场合
5.2字符串数组的初始化
指针
6.1指针的重要性
6.2什么是指针?
6.3指针的本质
6.4指针的简单使用
p = &a;
c = *p + 43;
指针访问内存可以通过*这个操作符去访问所指向的内存空间。
6.5指针的声明和初始化
6.6没有初始化的指针
6.7如何初始化一个指针?
int*p;p = NULL;或者p = 0;注意:永远不要使用一个空指针。在C里,使用空指针会有一个空指针错误。会使得程序崩溃。
6.8指针的使用注意
1>指针变量只能存储地址
2>指针变量未经过初始化,不要拿来间接访问其他存储空间
3>定义变量时的*仅仅是一个象征,没有其他特殊含义
4>
*p = 20;
这个时候的*的作用:访问指向变量p指向的存储空间
6.9指针与字符串
定义字符串的2种方式
1>利用数组
char name[] = "jingdi";
*特点:字符串里面的字符是可以修改的
*使用场合:字符串的内容需要经常修改
2>利用指针
char *name = "jingdi";
*特点:字符串其实是一个常量字符串,里面的字符是不能修改
*使用场合:字符串的内容不需要修改,而且这个字符串经常使用
结构体
struct Person
{
int age;
double height;
char *name;
};
struct Person p = {12,1.99,"张四"};
结构体使用注意:
1> 先定义类型,再定义变量(分开定义)
struct Student
{
int age;
double height;
};
2> 定义类型的同时定义变量
struct Student
{
int age;
double height;
} student;
struct
{
int age;
double height;
} student;
2.结构体类型的作用域
1> 定义在函数外面:全局有效(从定义类型的那行开始,一直到文件结尾)
2> 定义在函数(代码块)内部:局部有效(从定义类型的那行开始,一直到代码块结束)
枚举
使变量取固定的几个值enum Sex{ man, woman, other};
宏定义
1.所有的预处理指令都是以#开头
2.预处理指令分3种
1>宏定义
2>条件编译
3>文件包含
3.预处理指令在代码翻译成0和1之前执行
4.预处理的位置是随便写的
5.预处理指令的作用域:从编写指令的那一行开始,一直到文件结尾,可以用#undef取消宏定义的作用
6.宏名一般用大写或者以k开头,变量名一般用小写
条件编译
#if (A == 10)
printf("a是10\n");
#elif (A == 5)
printf("a是5\n");
#else
printf("a其他值\n");
#endif
只要写了#if,在最后面必须加上#endif
文件包含
typedef
1.作用:给已经存在的类型起一个新的名称
2.使用场合:
1>基本数据类型
2>指针
3>结构体
4>枚举
5>指向函数的指针
递归
递归的2个条件:
1.函数自己调用自己
2.必须有个明确的返回值