vlambda博客
学习文章列表

C语言基本知识简单回顾

本文主要内容:

    1. C语言的基本组成

    2. 全局变量、局部变量的初值问题

    3. 数据类型及其长度

    4. 运算符及其优先级

    5. 选择结构

    6. 循环结构

    7. 什么是函数,函数的三要数


下翻前停顿一会想想,你很清楚其包含的内容吗?

OK想好了,我们继续看。


1. C语言的基本组成(共五部分):


    预编译指令(即以#号开头的部分)

        example:  #include <stdio.h>

                        #define PI3.14


    数据(常量或变量的集合)

        程序是数据和指令的集合

        example:  int a

                        123

                        0xff

    指令(通俗即表达式语句)

        example: a++


    函数(程序中最小的功能模块)

        所有的指令除了定义初始化可以放在函数外,其他必须在函数体内

        example: int swap(int a, int b)

    注释(对代码的解释)

        不知道多少小伙伴没有写注释的习惯!!!

        example: //这是一个注释

                        /*这也是一个注释*/

 


2. 全局变量、局部变量的初值问题

不知道小伙伴有没有碰见过在使用变量时出现变量值出乎意料的问题,如读写文件时的缓冲区问题(出现乱码或多余)等等。

        首先说结论:全局变量在定义时值为0, 局部变量值为随机。

以下为截取一个问题及回答

原文:https://stackoverflow.com/questions/3373108/why-are-static-variables-auto-initialized-to-zero

https://blog.csdn.net/LinuxTiger/article/details/26835239?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-4.nonecase


3. 数据类型及其长度

  C语言数据类型分为四大类:

(1)基本类型:

        整型数据类型:

             (signed/unsigned)char

             (signed/unsigned)int

             (signed/unsigned)short

             (signed/unsigned)long

        浮点型数据类型:

            单精度 float

            双精度 double

    注:char为8位整型,有符号-128 ~ 127,无符号0 ~ 255.只是对应了一张ASCII码表,因此表示字符型(Linux下man ascii 即可查看次表); int   8/16位机中为16位,32/64位机中为32位;short 为16位;long  8/16/32位机中为32位,64位机中为64位; float 为32位;double 为64位。

(2)枚举类型:本质也是算数类型,列举可取具有离散性质的数据

            example:日期可取1-30

(3)空值类型:即void类型,表示次变量无值可取(无值并非为0)

        void用法含义:

           a. 作为函数返回值类型,说明无返回值

           b. 作为函数声明时作为参数类型及列表,说明无参数

(4)构造类型:包括以下几种类型

        指针、数组、结构体、共用体、函数类型


4. 运算符及其优先级

(1)算数运算符:++ --    

                              * / %

                              + - 

    注: 整形与整形运算结果依然是整形

         整形与浮点型运算结果是浮点型

         浮点型与浮点型运算 结果是浮点型

         % 取余的两个操作数都只能是整形数据 不可以是小数

(2)赋值运算符:*= /= %= += -= =  ...

(3)关系运算符:== != > < >= <=

(4)逻辑运算符:! && || 

    注:在逻辑表达式中存在惰性运算,即当一个逻辑表达式中&&前的内容为假则不继续进行判断及运算,当||前的内容为真也不继续进行后面的判断及运算

        example:int m = 1;

        int p = 0;

        int a = (1||(m=-1))&&(0&&(p=1)&p);

        结果:m = 1; p = 0; a = 0;

(5)条件运算符:格式 表达式1 ? 表达式2 : 表达式3

含义:若表达式1为真则执行表达式2,否则执行表达式3

更请参考:

https://baike.baidu.com/item/%E8%BF%90%E7%AE%97%E7%AC%A6%E4%BC%98%E5%85%88%E7%BA%A7/4752611?fr=aladdin#3

5. 选择结构

(1)if...else if....else...

    这个很简单不用多说,但在此提一点:若if或else if的的判断中有一个生效则选择结束。

(2)switch...case...default...

    基本形式: 

    switch(整形表达式)

    {

        case 整形常量表达式1:语句块1;

        case 整形常量表达式2:语句块2;

        case 整形常量表达式3:语句块3;

        .....

        case 整形常量表达式n:语句块n;

        default: 语句块 n+1;

    }

    执行逻辑: 

    即语义 

    第一步:求解整形表达式的值

    第二步:表达式的值与整形常量表达式1的值比较,如果相等则从整形常量表达式1后面的语句块处开始执行直到遇到break 或者 switch做完为止,如果不相等则继续往下一步走

    第三步:表达式的值与 整形常量表达式2的值比较 如果相等 则从整形常量表达式2后面的语句块处开始执行 直到遇到break 或者 switch做完为止如果不相等则继续往下一步走

    ....

    第n+1步:表达式的值与 整形常量表达式n的值比较 如果相等 则从整形常量表达式n后面的语句块处开始执行直到遇到break 或者 switch做完为止如果不相等则继续往下一步走

    第n+2步:找完了没找到就进入 default 进行执行 

    example:

    switch(day)

    {

        case 1: printf("周一");

        case 2: printf("周二");

        case 3: printf("周三");break;

        case 4: printf("周四");

        case 5: printf("周五");

        case 6: printf("周六");

        case 7: printf("周日");break;

        default: printf("不在范围");

    }

    day取以下值,结果是什么?

    1. 周一周二周三

    3. 周三 

    0. 不在范围 

6. 循环结构

(1)while循环结构

    while(表达式)

    {

        ...

    }

    语义:求解表达式,若为真执行语句体否则结束循环。

(2)do while循环结构

    do{

        ...

    }while(表达式);

    语义:执行语句块,求解表达式,若为真则执行语句块否则退出循环。

    注意:

    无论while还是dowhile都是先判断后循环只是dowhile至少做了一次。

(3)for循环结构

    for(表达式1;表达式2;表达式3)

    {

        ...

    }

    语义:求解表达式1;求解表达式2,若为真进行下一步否则退出循环;执行语句块;求解表达式3;继续求解表达式2。

7. 什么是函数,函数的三要数

(1)定义: 是将特定功能指令封装在一起的集合(语句组成的集合)。

(2)三要素:   函数返回值类型

                        函数名

                        函数参数类型及列表

    虽然我们都知道该怎么定义函数,但是也得知其然之前所有人。



若有错误,请指正谢谢!