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 型的指针 */ 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语言语法简单复习的主要内容,如果未能解决你的问题,请参考以下文章