C 语言基础

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);

头文件

错误处理

强制类型转换

递归

posted @ 2020-10-02 15:29  wentaoStudy  阅读(172)  评论(0)    收藏  举报