【week3】linux下的c语言

一、Linux下c语言程序编写

1、c语言特点:简单、快速、高性能、兼容性好、功能强大、易于学习
2、适合做什么:linux嵌入式(小工具)、操作系统、硬件编程(ARM嵌入式、单片机、Arduino)、有高性能要求的应用程序(NGINX)
3、安装vim(一个编辑器): sudo apt-get install vim (sudo 表示使用管理员权限 因为我目前是普通用户登录的)
查看编译器版本:gcc -v
4、vim编辑器常用方法:

  • i 插入模式:当前光标前边插入一个字符
  • a :当前光标后i按插入字符
  • Esc:返回命令模式
  • :w:返回命令模式后输入:w保存
  • :q :返回命令模式后输入:q退出
  • vi a.c :打开a.c文件
  • shift+a :光标移动到行尾插入
  • shift+i: 光标移动到行首插入
  • o :下一行插入
  • shift +o: 上一行插入
  • x :删除一个字符
  • dd: 删除一整行
  • :sp: 在vim里新建一个文件 ctrl+w+向下箭头 可以切换vim打开的不同文件 vim可以同时打开多个文件。
  • :set nu :打开行号
  • :数字 + dd:复制 放到剪贴板里了 ctrl+w+向上箭头 回到上边的文件
  • p:粘贴
  • :wqa:所有文件都保存并退出

5、例子1:比较两个数字大小
在这里插入图片描述
在这里插入图片描述
分成两个文件写
在这里插入图片描述
在这里插入图片描述
一开始出错是因为少一句函数的声明(因为在不同文件中,虽然一起编译了)。
如果用#include “max.c” 包含头文件的形式,相当于把max.c的文件都复制过来。
gcc -c max.c -o max.o 编译了不可执行
gcc max.o hello.c -o hello.out 编译后连接使用
在这里插入图片描述
6、Makefile的编写(make 工具帮助编译)
在这里插入图片描述
在这里插入图片描述
7、main 函数中的参数
在这里插入图片描述
在这里插入图片描述
8、标准输入流输出流以及错误流及重定向
标准输出流,输出到显示器(终端输出);标准输入流,由键盘输入(键盘输入)。
在这里插入图片描述
在这里插入图片描述
输出流重定向
./a.out 1>> a.txt或 1默认不写./a.out >> a.txt (标准的输入流是0、标准的输出流是1,不写就是默认)
把标准输出流重定向到a.txt文件,之前的输出流默认情况下输出到终端(显示器),重定向以后就不再输出到终端了,它会把输出内容 写入到a.txt文件里。这个就是输出流重定向。在这里插入图片描述
在执行一次的时候,a.txt里面有两次执行的内容,把内容重定向到这个文件不会覆盖这个文件原来的内容,即在原来文件的末尾追加这个内容。

  • 如果用单箭头>重定向到a.txt就是会每次用最新的内容覆盖原文件。覆盖模式
  • 如果用双箭头>>就是把新内容追加到文件的结尾。追加模式
    在这里插入图片描述

输入流重定向
在这里插入图片描述
标准错误流:错误输出 ,标准错误流有一个要求函数的返回值不能等于0
在这里插入图片描述
在这里插入图片描述
echo $?
0 返回值是0说明程序正常运行,说明标准错误流是没有得到输出的。
echo $?
1 返回值是1 说明程序运行是错误的。

9、c语言小程序(使用管道)
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、c语言指针与内存

1、指针:&取地址符 * 指针
在这里插入图片描述
2、gdb调试工具
在这里插入图片描述
在这里插入图片描述
加上-g才可以支持调试
在这里插入图片描述

  • l :显示源代码 可能显示不完全 接着按回车 表示继续执行刚刚的命令,这样就显示完全了
  • start :单步调试
  • p a :打印变量a 的值
  • n :跳到下一行 接着执行下一行
  • break 12 :在第12行打断点
  • s:进入函数里边
  • bt: 查看函数堆栈
  • f 切换函数栈
  • q 推出调试
  • p & rect; 打印变量的地址
    在这里插入图片描述
    3、计算机内存的分配
    内存是由操作系统统一管理,一个字节有8个二进制位,
    一个4G内存条==两个2G内存条 但不是你想插多少内存条都可以的
    因为计算机把内存看成一个整体来计算内存大小。
    32位操作系统只能使用4G内存,因为地址总线是32位(32根地址总线就有2的32次方个状态 2的32次方个字节=1024102410244字节=102410244K=10244M=4G),也就是寻址空间是32位。
    32位指的是:给内存编号只能编到32个二进制位

用户内存隔离开的好处:

  • 操作系统的内存不会被大量占用;
  • 避免机器卡住、卡死、死机等状态;
  • 可通过操作系统把应用程序关闭;
  • 使操作系统更安全。
    在这里插入图片描述
    在这里插入图片描述

声明一些全局变量或者一些常量、静态变量会被放在数据段
**代码段:**应用程序 函数编译之后存到磁盘,一旦运行代码编译后的二进制数据会加载到内存中,放在代码段(在低地址段);c语言语法是不允许我们直接操作代码段;除了代码编译后存在代码段以外,(当前调用哪个函数、当前调用的函数运行到多少行、并且这个函数中有哪些变量,这些变量的值是什么)被保存在栈中(高地址段)。
变量的本质就是内存,变量名只是一个代号。
指针保存就是内存地址,指针本质就是地址。
64位 操作系统 指针占8个字节

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值