C语言基础
基础库
//用法例如#include <stdio.h>
stdio.h //stdio.h包含基础的C语言的输入输出
string.h //一些字符串操作的库,C语言没有字符串的定义,只有字符数组的定义,但是直接使用%c输出字符数组时,会直接判断字符串的结束
stdlib.h //动态分配内存空间时所用的一些方法,例如malloc ,free等
stdarg.h //用于C运行文件传变量实现的库
基本框架
#include <...>
return_type function_decleartion(arg_type argument);
int main(void)
{
dosomething();
return 0;
}
基本结构
结构一:顺序结构
、、、省略
结构二:循环结构
//type1
for(int i = 0 ; i < n ; i++)
{
funcs();
}
//type2
do{
funcs();
}while(judgement());
//type3
while(judgement())
{
funcs();
}
结构三:分支结构
if(judgement())
{
do_when_true();
}
else if(judgement())
{
do_when_this_judgement_true();
}
else
{
do_when_false();
}
输入输出
//屏幕输入输出
printf("%d , %s , %c , %f , %le , %p \n" , int_number , char_group , char_chr , float_number , double_number , pointer_type);
scanf("%d" , int_number);
指针、引用
//存放地址的变量
//a 可以用来存放int类型数据的地址,什么类型,就要用什么类型的指针,包括枚举、结构体、共用体
int number = 10;
int *p ;
p = & number ; //其中&表示引用,也是取地址符号,即将number的地址取出来给a
printf("value of p : %p\n" , p);
printf("value of p point to : %d\n" , *p);
//数组类型变量,变量名称可以看作是指针类型,因为变量名称存放的是数组的首地址,调用的时候可以直接传入变量名称,不过数组的调用需要调用其具体项目,例如char_group[1]
char char_group[20];
printf("value of char_grop : %p\n" , char_group);
//如果指针的地址为NULL,那么其值为0x0
字符串
//C语言中没有字符串,我们现在用char数组的形式来表示
char char_group[] = "Hello World!";
printf("%s\n" , char_group);
//其中string.h中包含对于字符串的一些基本操作
#include <string>
//字符串拷贝操作,一般用于字符串的赋值
strcpy(char_group , "Hello wentaoStudy");
//字符串拼接操作,将一个字符串拼接到另外字符串的后边
strcat(char_group , " , good morning!");
//字符串长度,返回类型为int,实际上就是数组的长度
strlen(char_group);
//字符串查找操作,返回的是在字符串中第一次出现位置的指针
strchr(char_group , chr); //返回为chr字符在char_group中的位置,类型为指针
strstr(char_group , str1); //返回str1在char_group中的位置,类型为指针
枚举
enum Day
{
MON , TUE , WED , THU , FRI , SAT , SUN
};
//默认第一个元素的值为1,其他递增
//使用
enum Day day ;
day = MON;
printf("%d\n" , day);
//同时,也可以在定义的时候使用typedef
typedef enum
{
MON , TUE , WED , THU , FRI , SAT , SUN
}Day ;
//使用
Day day;
day = MON;
//...
结构体
//结构体类似与其他语言中的对象的感觉,不过在C语言中,作为面向过程的语言,C语言还没有对象
//定义
//第一种定义类型,完整型
struct Student
{
int id;
char name[20];
} student; //第一种类型在这里直接定义了结构体变量
//第二中定义类型
struct Student
{
int id;
char name[20];
};
struct Student student;//第二中类型定义结构体变量时使用的方式
//第三种定义类型
struct
{
int id;
char name[20];
} student; //第三种类型不定义结构体名称,直接定义结构体变量
//第四种定义类型
typedef struct
{
int id;
char name[20];
} Student;
Student student; //第四种定义结构体变量时的方式,省略前面的struct,直接用结构体名定义
//结构体的初始化
student = { 0 , "wentaoStudy"};
//结构体中是可以存放指针类型的,甚至可以存放指向自身类型的指针
struct Node
{
int data
struct Node * next;
};
共用体
//这个使用没有结构体那么多,而且目前对于我来说,使用也不是太方便,主要用于节省空间
文件读写
//文件读取和写入
//plus 支持读写
FILE *fp = NULL;
// write to file
fp = fopen("/Example_Dir/Example_File" , "w+");
fprintf(fp , "Hello File !\n");
fputs("Hello File Again !\n" , fp);
fclose(fp);
// read from file
char buffer[255];
fp = fopen("/Example_Dir/Example_File" , "r+");
fscanf(fp , "%s" , buffer);
fgets(buffer , 255 , fp);
内存管理
//涉及一个库,四个方法,如果申请空间返回NULL,代表没有申请成功
//stdlib.h 头文件
char *memory;
//分配初值为0的连续空间
memory = (char *)calloc( 100 , sizeof(char));
//分配连续空间
memory = (char *)malloc( 100 * sizeof(char));
//如果申请的空间不够,需要在基础上再次申请,添加
memory = (char *)realloc(memory , 100 * sizeof(char));
//释放空间
free(memory);
头文件
错误处理
强制类型转换
递归