C语言知识点梳理

C语言语法总结

写在开篇:本篇文章适合C语言初学者和想梳理和回顾一下C语言整体语法的看官,由于考虑不要对初学者灌以较深的知识点而让其失去学习的兴趣,本篇文章知识点比较全面且不深,请看官自己决定是否阅读以免浪费您宝贵的时间!

C语言作为一种底层面向过程语言,在编程语言中有着举足轻重的地位,基本上“科班”出身的计算机系学生第一个接触的编程语言都是C语言,因为笔者上大一的时候(2004年)也是学习了C语言,但是长时间没有运用了,所以对C语言知识点做一个梳理,也为后续开发FFmpeg音视频做一个坚实的基础。好的废话不多说,先来个HelloWorld镇楼:
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("Hello World!\n");
return 0;
}

常用基本类型:

整型:short, int, long
    short:16位,占2个字节
    int:32位,占4个字节
    long:32位,占4个字节

浮点型:float, double
float:32位,精度低
double:32位,精度高
注:浮点型适合做科学运算,但是计算速度相对慢,如果不是做科学计算,那么最好使用整型数据。

char型:8位,1个字节。只代表一个字符。

void型:一般使用指针的时候使用。

变量与常量:

int a = 0;              //变量,可以进行赋值,其中的值可以更改的
const int len = 256;    //常量,定义之后,值不可以再改变 const是关键字,需要写在前面

算术运算和比较运算:

算术运算:
    +, -, *, /, %:加/ 减/ 乘/ 除/ 余
比较运算:
    >, ==, <, >=, <=, !=: 大于/ 等于/ 小于/ 大于等于/ 小于等于/ 不等

流程控制语句:

条件控制语句if else:
    if(a>b){
        执行语句……;
    } else {
        执行语句……;
    }
循环控制语句while, do while, for:
    while(条件){
        执行循环的语句……
    }

    do{
        执行循环的语句……
    }while(条件)

    for(int i = 0; i < 10; i++){
        执行循环的语句……
    }

函数:

函数用来实现函数体中的功能,本着高内聚,低耦合的思想,在函数内部只针对函数要实现的功能做开发,而与其他的函数最好是没有关联。
void func(int i){
    函数体
}
函数由返回值,函数名,参数,函数体组成。

文件操作:

C语言中对文件的操作是先定义一个FILE变量,然后对这个file变量进行操作
简单实例:
    #include<stdio.h>
    int main(int argc, char* argv[]){
        FILE* file;
        char buf[1024] = {0,};
        file = fopen("1.txt", "a+");
        fwrite("hello, world!", 1, 13, file);
        rewind(file);
        fread(buf, 1, 20, file);
        fclose(file);
        printf("buf = %s\n", buf);
        return 0;
    }
a+:表示addition,如果1.txt存在则在1.txt文本内容的后面追加内容,如果不存在1.txt,则创建1.txt。
fwrite中的参数:第一个参数是你要写入的内容,第二个参数是第一个参数中每个字符占几个字节,第三个参数是第一个参数一共多少个字节,第四个参数是要写入那个文件中。
fread中的参数:第一个参数要将数据内容读到哪里,第二个参数是将这个内容按几个字节一份进行读取(例子中是一个字节一个字节的读),第三个参数是一共读取多少个字节,第四个参数是从哪里读取。
rewind:这个是让光标回到file的文本内容的首位(和数据库游标概念类似),否则光标停留在最后(因为前面fopen的时候输入的参数是"a+",意思是在最后追加)。
fclose:在使用完文件之后需要关闭这个文件。

指针:

指针是C语言的灵魂,没有学过指针相当于没学过C语言。
指针存放的是指向某个值的地址,关键字是*
int *a 这里a存放的是指向*a值的地址,&a存放的是指向a的地址

这里稍微提及一下操作系统是如何管理内存的。下面三个概念需要了解一下:栈空间,堆空间和内存映射:
    
    栈空间:我们每记录一个函数的时候,操作系统会给我们分配一段栈空间;而当函数退出的时候,操作系统又会回收这段栈空间。这就是为什么局部变量有作用域的原因。一般栈空间的大小是4M-8M。 
    堆空间:操作系统为每个进程一般赋予4G左右的空间,操作系统会占1G,剩下3G都是堆空间的。堆空间一般存放全局变量和静态变量。
    内存映射:磁盘中的文件映射到内存中,只要对内存中的更改,磁盘也会更改,这样会大大提升速度,一般运用在数据库操作。

指针如何分配和释放内存?

    分配空间:
    void* mem = malloc(size);
    释放内存:
    free(mem);

    使用malloc关键字,接后面参数的大小,就分配了堆空间的内存。在分配内存并使用之后一!定!要!释!放!掉!之前分配掉的内存,要不然会出现内存泄漏的情况,内存泄漏多了就会产生内存溢出的现象。当然还有一种情况是野指针,野指针是指占用了别人的内存,当你已经释放了内存之后,别人申请了这块内存,你就不能继续再用这块内存了。

函数指针:

    返回值类型(*指针变量名)([形参列表]);

    int func(int a, int b);         /* 声明一个函数 */
    int (*f)(int a, int b);         /* 声明一个函数指针 */
    f = func;                       /* 将函数func的首地址赋值给指针f */

    函数指针的优点在于:一个函数指针可以指向不同的函数,也就是不改变函数名字的前提下,可以让函数有不同的行为(类似于java的多态)。

结构体:

结构体有点类似于OOP中的class,但是不同的是其中只能定义变量不能定义方法。
关键字struct,相当于自定义类型。
struct st{
    int a;
    int b;
};
使用的时候需要写全 struct st sst, 然后使用“.”来调用定义的成员变量 sst.a = 10, sst.b = 20

枚举类型:

枚举的意义在于限制了枚举类型的对象只能在一个限定范围中去选择。
enum e_type{
    red = 0,
    green,
    blue
};
使用的时候需要写全 enum e_type et, 然后使用“.”来调用定义的成员变量 et.red
需要注意的是枚举中的变量是自增1的,green就是2,blue就是3。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,242评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,953评论 3 402
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 171,299评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,709评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,723评论 6 399
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,236评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,629评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,594评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,135评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,156评论 3 345
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,285评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,914评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,600评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,073评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,203评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,798评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,339评论 2 365

推荐阅读更多精彩内容