[Rust 其他] C语言指针与内存
C Note
文件
hello.c # 源文件 hello.o # 编译后二进制文件 hello.h # 声明hello.o文件,hello.o 无法查看
include
系统目录下查找,是标准库 #include <stdio.h>
当前目录下查找,自定义库, 每次都会编译 #include “mycfile.c”
当前目录下查找,自定义库, 已编译好的二进制文件,不重新编译 #include “mycfile.o”
当前目录下查找,自定义库, 同mycfile.o, 方便查看 #include “mycfile.h”
main 函数
/* 入口函数 返回Int 类型,等于 0表示程序 执行完成,不等于0 表示执行异常, echo $? 查看执行结果 */
Int main() { return 0; }
编译环境
cc -v gcc -v
makefile
Makefile 是编译时的配置文件,需要自己书写,使用 make 命令编译
&&
链接执行多个命令,左边命令执行成功后,执行右边命令
./a.out && ls && ls -l
输入流,输出流,错误流
stdin 默认设备键盘 stdout 默认设备显示器 stderr
printf(“hello world!”); 等于 fprintf(stdout, “hello world!”);
printf(“this is error.”); 等于封装 fprintf(stderr, “this is error”);
Int a; scanf(“input number”, &a) 等于封装 fscanf(stdin, “input number”, &a)
重定向
输出流重定向: ./a.out 1>> a.txt 1 代表默认输出流,可不写, >> 会追加文本, > 重新写新的文本 输入流重定向:./a.out < input.txt 会使用input.txt 数据作为默认的输入值 错误流重定向:./a.out 2>> a.txt 2代表默认错误流, >> 会追加文本, > 重新写新的文本
可分别导入导出:./a.out 1>>out.txt 2>>err.txt <input.txt
管道
count | avg
Count的结果作为输入流 传给 avg
指针
Int
a 指针类型,
表示去a的地址找值
void change(int *a) { }
Int main() {
传递指针类型C语言指针与内存
change(&a) }
gdb
$gcc -g main.c -o main.out$
gdb ./main.out
l 查看源代码 Start 开始单步调试
N 下一行 P 变量 输出变量
S 进入函数
Q 退出
Bt 查看栈
进制
二进制 满 2进一 1+1 = 10 + 1 = 11 + 1 = 100 十进制 满 10 进一 8+1 = 9 + 1 = 10 十六进制 满 16 进一 E + 1 = F + 1 = 10 + 1 = 11 + F = 20 + F = 2F +1 = 30