基本程序设计思想
语言工具的特性
GCC: GNU Compiler Collection <预处理、编译、汇编、链接>
命令 | 功能 | 指令 |
---|---|---|
-v | 版本查询 | gcc -v |
- | 简单编译 | gcc test.c -o test |
-E | 预处理 | gcc -E test.c -o test.i |
-S | 编译 | gcc -S test.i -o test.s |
-c | 汇编 | gcc -c test.s -o test.o |
- | 链接 | gcc test.o -o test |
-D | 宏定义 | gcc -D DATA=xx |
头文件、宏定义
#include " " – 自定义;<> – 系统定义
#define 宏定义
#ifdef, #else, #endif, #undef
预定义宏 FUNCTION, FILE, LINE
宏展开中的#, ## (字符串化,连接符号)
关键字
32个
- 杂项
关键字 | 含义 |
---|---|
sizeof | 查看内存空间容量的关键字 |
return | 函数返回 |
- 数据类型:指定内存大小的关键字
关键字 | 含义 |
---|---|
char | 软件操作的最小单位,硬件处理的最小单位。 |
int | 操作系统单个周期能处理的最优大小 |
long/short | |
unsigned/signed | 无/有符号数 |
float/double | 浮点数 |
void |
- 自定义数据类型
关键字 | 含义 |
---|---|
struct | 结构体,占用一段内存连续空间 |
union | 共用体,共用起始地址的一段内存 |
enum | 枚举,整形常数的集合,定义 |
typedef | 数据类型的实意化 |
- 逻辑结构
if, else
switch, case, default
do, while, for
*continue, break, goto - 类型修饰符:指定内存分布的关键字
auto, register, static, const, extern, volatile - 运算符
算数运算符,逻辑运算,位运算,赋值运算,内存访问符号 - 逻辑操作
顺序执行,分支执行,循环执行
函数
函数三要素:函数名,参数列表,返回值类型
函数名就是地址
函数指针 int(*p)(int, int, char)
强制类型转换 p=(int(*)(constant char *, …))0x8048320
实参、形参
传递形式: 值传递,地址传递,连续空间<数组,结构体>
地址传递关注空间的可读性,对于只读空间不可写。
非/字符空间:字符空间以0x00为结尾,非字符空间指定空间大小
void* 数据空间的标识符
int/char/… * 单一空间的标识符
指针作为(函数)空间返回的唯一类型
指针
指针二要素:指针大小和读取内存的方式
& 取址符,* 指针标识/取值符,[ ] 指针指向内存空间
指针+修饰符
const char *p 修饰的内存空间,而不是指针本身
char * const p 修饰的是指针本身而不是内存空间
指针+运算符
操作的单位是sizeof§, p[n]访问内存值,p++操作地址,NULL地址无效值。
数组的数组名是一个常量,不能进行赋值,空间定义时进行初始化。
数组越界
char buf[10] = “abc” 常量区向变量区的拷贝,buf[2]=‘e’ ✅
char *p = “abc” 常量区不可赋值,p[2]=‘e’ ❌
strcpy, strncpy 字符拷贝函数,字符串以0作为结尾。
字符空间:以ASCII编解码的空间,以\0作为结束标志。
非字符空间
memcpy
指针数组 int * p[10] 两者可以看成等效,p[0]指向第一个数据内容。
多级指针 int ** p
函数指针 int(*p)(int, int, char)
以块的方式读取内存 int *p[5]
内存空间
结构体 struct 字节对齐/位域
size/strings/nm
内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
内存访问符号
( ):限制符 (a+b)*c 函数访问
[ ] : 数组,内存访问的符号
{ } : 函数体的限制符
->、. : 地址访问,变量访问
&、 * :取址符,取值符
Linux
-
Linux 组成结构
Computer Resource 硬件资源
Kernel 内核
shell 外壳 <bash, cshell …>
FileSystem 文件系统
特性:多用户、多任务、多平台、图形化界面、硬件支持(低配置)。
vmwave – 虚拟机
Ubuntu – 桌面开源的,比较纯正的linux
图形模式与命令模式的切换:ctrl + Alt + F2/F3/F4/F6 图形转命令;ctrl + Alt + F7 命令转图形。 -
文件系统:一种组织计算机文件和资料的方法
EX3是基于日志方式的文件系统
SWAP是交换分区的文件系统
linux中一切皆文件。
蓝色–目录,绿色–可执行,浅蓝色–链接,红色–压缩,灰色–其它(option)
普通文件 – -,目录文件–d,链接文件–l,块设备–b,字符设备–c,Socket–s,管道文件–p
目录结构:磁盘逻辑结构管理物理结构,格式化将磁盘分成很多的文件块区。
《linux命令大全》
$command [option(s)][arguments(s)] 命令行格式,区分大小写
命令行别名使用 alias alias-name=‘value1;value2…’/unalias
shell的特殊字符
1.通配符 *–通配0个或多个字符,?–通配任意单个字符,[]–通配范围内字符。
2. 一行执行多条命令 ;
3. 输入输出重定向 >, <, >>
4. 管道符 |,将一个进程的输出作为另一个进程的输入
5. 其他 %, $, ~
联机帮助 man name/-k keyword
清屏 clear
历史记录 history
分类 | 常用命令 | command |
---|---|---|
文件管理 | 查看文件和目录 | pwd、cd、ls、file |
文件管理 | 创建和删除文件目录 | touch、mkdir、rm、rmdir/ln |
文件管理 | 显示文件内容 | cat、more、head、tail |
文件管理 | 拷贝和移动文件目录 | cp、mv |
文件管理 | 文件目录权限 | <r、w、x、–> chmod、chown、chgrp |
文件管理 | 查找文件 | find、locate |
文件管理 | 过滤和统计 | grep、wc |
系统管理 | 日期时间与进程查看 | data、cal、ps |
系统管理 | 切换用户,设置普通用户的超级权限与关机重启 | su、sudo、shutdown、reboot |
用户管理 | 密码设置和修改 | passwd |
用户管理 | 查找用户 | id、users、who、who am i、whoami |
磁盘管理 | 查看磁盘信息 | du、df |
网络配置管理 | 查看网络连接 | ping、ifconfig |
应用程序管理 | 扩展名 | rpm、dep |
应用程序管理 | 安装卸载 | dpkg、install、apt |
VI三种模式
命令模式 command mode,插入模式 edit mode,末行模式 Ex mode。