C语言语法简单复习

Posted 有心好书

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言语法简单复习相关的知识,希望对你有一定的参考价值。

word编写

最近在看ijk源码,发现ijk底层源码基本都是C语言编写的。看来有必要简要回顾下大学的c语言语法了。

01.

分类

C语言

备注

语言由来

 

1972 年,为了移植与开发 UNIX 操作系统,丹尼斯·里奇在贝尔电话实验室设计开发了 C 语言

 

 

语言特性

 

面向过程式

易于学习。

结构化语言。

它产生高效率的程序。

它可以处理底层的活动。

它可以在多种计算机平台上编译。

 

 

数据结构

 

基本类型:它们是算术类型,包括两种类型:整数类型和浮点类型。

 

枚举类型:它们也是算术类型,被用来定义在程序中只能赋予其一定的离散整数值的变量

 

void 类型:类型说明符 void 表明没有可用的

 

派生类型:它们包括:指针类型、数组类型、结构类型、共用体类型和函数类型

 

枚举:

enum DAY

      MON=1, TUE, WED, THU, FRI, SAT, SUN

;

enum DAY day;

 

 

数组:与java类似

double salary = balance[9]

api与java类似

 

 

指针:

 

结构体:

 

与java的区别:没有string,只有char

在 C 语言中,字符串实际上是使用 null 字符 '\\0' 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。

 

char greeting[] = "Hello";

 

 

 

变量&运算符

 

与java没啥区别

 

 

 

流程控制&异常处理

 

条件分支和循环跟java一模一样

 

异常处理跟java不同:

C 语言不提供对错误处理的直接支持,但是作为一种系统编程语言,它以返回值的形式允许您访问底层数据。在发生错误时,大多数的 C UNIX 函数调用返回 1 NULL,同时会设置一个错误代码 errno,该错误代码是全局变量,表示在函数调用期间发生了错误。您可以在 errno.h 头文件中找到各种各样的错误代码。

 

 

 

 

 

函数

 

与java没啥区别
函数参数:
如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的形式参数。

形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数时被销毁。

当调用函数时,有两种向函数传递参数的方式

 

传值调用

该方法把参数的实际值复制给函数的形式参数。在这种情况下,修改函数内的形式参数不会影响实际参数

 

引用调用

通过指针传递方式,形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作

 

 

 

 

指针(key point)

指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。

int *ip; /* 一个整型的指针 */

double *dp; /* 一个 double 型的指针 */
float *fp; /* 一个浮点型的指针 */

char *ch; /* 一个字符型的指针 */

 

所有实际数据类型,不管是整型、浮点型、字符型,还是其他的数据类型,对应指针的值的类型都是一样的,都是一个代表内存地址的长的十六进制数。

不同数据类型的指针之间唯一的不同是,指针所指向的变量或常量的数据类型不同。

 

一个栗子:

 

 

 

结构体(key point)

C 数组允许定义可存储相同类型数据项的变量,结构 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。

 

struct Books char title[50]; char author[50]; char subject[100]; int book_id; book;

 

 

 

多线程支持

等ijk看到这个的时候再去查资料

 

常见库

到时候直接看文档

 

02.一个涉及结构体的demo

//
//  main.c
//  CTest
//
//  Created by niehongtao on 2019/9/19.
//  Copyright © 2019年 niehongtao. All rights reserved.
//

#include <stdio.h>

// 声明一个结构体,没有声明变量
typedef struct 
    int id;
    char name[20];
    int math;
    int english;
    int c;
    int avargrade;
 Stu;
int main(int argc, const char * argv[]) 
    // 1.结构体学习
    Stu stu[5] = 
        1, "小明", 90, 98, 100, (90 + 98 + 100)/3,
        2, "小明1", 91, 92, 100, (91 + 92 + 100)/3,
        3, "小明2", 92, 93, 100, (92 + 93 + 100)/3,
        4, "小明3", 93, 94, 100, (93 + 94 + 100)/3,
        5, "小明4", 94, 95, 100, (94 + 95 + 100)/3
    ;
    // 以下写法是错误的,因为C语言是很多现代开发语言的鼻祖,所以有一些比较过时或者比较死的规定是需要遵守的,用起来没java写法那么方便
//    Stu stu[0] = 1, "小明", 90, 98, 100, (90 + 98 + 100)/3;
//    Stu stu[1] = 2, "小明1", 91, 92, 100, (91 + 92 + 100)/3;
//    Stu stu[2] = 3, "小明2", 92, 93, 100, (92 + 93 + 100)/3;
//    Stu stu[3] = 4, "小明3", 93, 94, 100, (93 + 94 + 100)/3;
//    Stu stu[4] = 5, "小明4", 94, 95, 100, (94 + 95 + 100)/3;
    
    Stu mm = 6, "mmm", 94, 95, 100, (94 + 95 + 100)/3;
    printf("name : %s\\navargrade: %d\\n", mm.name, mm.avargrade);

    for (int i = 0; i < 5; i ++ ) 
        printf("name : %s\\navargrade: %d\\n", stu[i].name, stu[i].avargrade);
    
    
    // 2.指针
    // 每一个变量都有一个内存位置,每一个内存位置都定义了可使用连字号(&)运算符访问的地址,它表示了在内存中的一个地址
    // 指针是一个变量,其值为另一个变量的地址,即,内存位置的直接地址。
    int var1;
    printf("var1 变量地址:%p\\n", &var1);
    
    Stu var = 6, "mmm", 94, 95, 100, (94 + 95 + 100)/3;
    Stu *ip;
    // 在指针变量中存储 var 的地址
    ip = &var;
    printf("Address of var variable: %p\\n", &var  );
    // 在指针变量中存储的地址
    printf("Address stored in ip variable: %p\\n", ip );
    // 使用指针访问值
    // ->操作符:
    printf("Value of *ip variable: %d\\n", ip->avargrade);
    
    // C 中的 NULL 指针
    // 在变量声明的时候,如果没有确切的地址可以赋值,为指针变量赋一个 NULL 值是一个良好的编程习惯。赋为 NULL 值的指针被称为空指针。
    // NULL 指针是一个定义在标准库中的值为零的常量
    int  *ptr = NULL;
    printf("ptr 的地址是 %p\\n", ptr  );
    
    return 0;

03.指针的一个demo

指向结构体变量的指针

https://www.cnblogs.com/dire/p/5222968.html

04.结构体与指针

05.与JAVA的垃圾回收机制不同,C语言的内存是需要手动管理的(★★★)

c内存管理:

https://www.runoob.com/cprogramming/c-memory-management.html

06.工具

语法参考资料:

https://www.runoob.com/cprogramming/c-structures.html

在线编译工具:

https://c.runoob.com/compile/11

mac下IDE:xcode/atom(不过还是xcode好用)

https://www.jianshu.com/p/00bfbce6a490

----- 总结------

C语言中最重要的需要理解的部分就是:指针,函数的指针,指针的指针,但是最基本的还是要把一个小的模型理解即可:

int avr;

int *p;

p = &avr;

以上是关于C语言语法简单复习的主要内容,如果未能解决你的问题,请参考以下文章

C语言 基础语法汇总 期末复习

C语言 基础语法汇总 期末复习

C语言复习计划

c#语法复习总结-浅谈c#.net

c#语法复习总结-数据类型

Python基础知识大全(适用于全面复习Python语法知识)