LinuxC总结

汇总一下六天的知识内容

Day1

嵌入式Linux操作系统

什么是操作系统

操作系统是管理和控制计算机硬件与软件资源的计算机程序,它是直接运行在“裸机”上的最基本的系 统软件,任何其他软件都必须在操作系统的支持下才能运行

操作系统的分类

1.批处理操作系统 2.分时操作系统 3.实时操作系统 4.嵌入式操作系统 5.个人计算机操作系统 6.网络操作系统 7.分布式操作系统

嵌入式操作系统

什么是嵌入式操作系统

嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于对功能、可靠 性、成本、体积、功耗有严格要求的专用计算机系统。

嵌入式系统应用领域

一.工业控制 机械手臂、集装箱起重机、工业机器人、电机驱动器、智能测量仪、智能控制器、智能数控机床等
二、智能家居领域 智能扫地机器人、空调、冰箱、洗衣机、投影仪、智能门锁、智能门禁、可视对讲门铃、微波炉、电视 机、遥控器、水电表、扫地机器人等
三、安防领域 人脸识别、监控设备、指纹识别、视网膜识别等
四、汽车电子领域 行车记录仪、自动驾驶系统、车辆导航系统等
五、交通物流领域 蜂巢快递柜、共享单车、智能分拣等
六、健康医疗领域 生化分析仪、血液分析仪、CT等各类智能检测仪器、智能血压计、智能手环等 七、通信领域 机顶盒、路由器、通信基站设备、交换机等
八、金融领域 刷卡机、智能ATM终端等
九、消费电子领域 手机、平板电脑、可穿戴设备、游戏机、数码相机、广告机、遥控玩具、音频视频播放器、自动售货机等
十、军事航空领域 卫星系统、无线传输系统、定位系统、无人机、雷达系统、火炮、导弹和智能炸弹制导引爆等控制装 置、各种智能坦克、舰艇、轰炸机等

嵌入式系统分类

Linux μC/OS windows CE Vxworks QNX

嵌入式Linux

嵌入式 Linux 入门(一、Linux 基本介绍及文件结构)_嵌入式linux_矜辰所致的博客-CSDN博客

Linux操作系统的使用

认识shell

shell:命令行解释器,用户和内核之间的桥梁
shell也是一个程序,提供给了我们一个界面(终端)

shell命令的格式

shell命令的三要素
命令名称 [选项] [参数]

 

 注意:
<1>.一条命令三要素之间必须要有空格隔开
<2>.若多个命令在一行书写,用分号(;)将各命令隔开
<3>.如果一条命令不能在一行写完,在行尾使用反斜杠()标明该条命令未结束

Day2

Linux操作系统的使用

用户系统相关命令

用户切换命令(su)
linux@ubuntu:~$ sudo -i #普通用户切换root用户
[sudo] password for linux:
root@ubuntu:~# su - linux
linux@ubuntu:~$
系统管理命令
ps: 显示当前系统中由该用户运行的进程列表

ps -ef :查看所有进程及其PID(进程号),系统时间,命令详细目录,执行者

ps aux:除可显示-ef所有内容之外,还可显示CPU及内存占用率,进程状态 

ps -w 加宽以显示较多的信息

top:动态显示系统中运行的程序 (一般为每隔几秒刷新一次)

pstree 以树形格式显示进程

kill 输出特定的信号给指定PID(进程号)的进程 

kill -l 列出所有可用的信号名称

 clear:清除屏幕上的信息
uptime:显示系统已经运行了多长时间
linux@ubuntu:~$ uptime
01:57:26 up 1:28, 1 user, load average: 0.02, 0.05, 0.01
关机

shutdown -h now 现在立刻关机
shutdown -h +30 30分钟之后关机

重启

reboot 重启
shutdown -r now 重启

磁盘相关命令

free: 查看当前系统内存的使用情况

linux@ubuntu:~$ free
total used free shared buff/cache available
Mem: 1999388 1369732 82144 16660 547512 455616
Swap: 2097148 9228 2087920

df:查看文件系统的磁盘空间占用情况

linux@ubuntu:~$ df
Filesystem 1K-blocks Used Available Use% Mounted on
udev 973652 0 973652 0% /dev
tmpfs 199940 1896 198044 1% /run
/dev/sda1 81985944 22316576 55458784 29% /
tmpfs 999692 0 999692 0% /dev/shm
tmpfs 5120 4 5116 1% /run/lock
tmpfs 999692 0 999692 0% /sys/fs/cgroup

du: 统计目录(或文件)所占磁盘空间的大小
du -sh

linux@ubuntu:~$ du -sh 23072 #显示该文件夹所占的大小
1.3M 23072
linux@ubuntu:~$ du -sh ./ #显示当前目录下所占磁盘空间的大小
du: cannot read directory './.dbus': Permission denied
4.6G ./
linux@ubuntu:~$ du -sh
du: cannot read directory './.dbus': Permission denied
4.6G

fdisk 查看磁盘分区情况及对磁盘进行分区管理
fdisk -l 显示文件系统的分区情况
<1>.使用fdisk必须拥有root权限
<2>.IDE磁盘hda,hdb......,SCSI硬盘是对应sda,sdb......hda1,第一个硬盘分区

文件,目录相关命令

vim 编辑器
查找(命令模式下)
/<要查找的字符> 向下查找要查找的字符
?<要查找的字符> 向上查找要查找的字符
替换 (底行模式下)
:range #range 表示要替换范围
s/string1/string2/gc #s:转入替换模式
#string1,string2 把string1转成
string2
#g全部替换
#c 替换前询问
:%s/str1/str2/g #字符串str2替换正文中所有出现的str1
chmod:改变文件的访问权限

更改权限的方法

chmod o-r 1.c #给其他取消可读的权限
chmod g+w 1.c #给同组用户添加写的权限

用三位二进制,一个八进制
x---1
w---2
r---4
--x 001 1
-wx 011 3
rwx 111 7
chmod 664 1.c
chown:修改文件的所有者和组别
sudo chown linux 1.c #必须使用root权限 修改文件所有者
sudo chown :linux 1.c #修改文件组别
chgrp:改变文件的组所有权
cat 查看比较短的文档
more适合查看比较长的文档
按空格(space)向下走一页
按回车(Enter)向下走一行
按B向上走一页
按q退出
less是more的增强版
按空格(space)向下走一页
按回车(Enter)向下走一行
按B向上走一页
按q退出
支持上下箭头
grep: 在指定文件中搜索特定的内容,并将含有这些内容的行标准输出
grep -n scores arr.c #在arr.c这个文件中查找scores这
个字符串

一般会和(|)管道配合起来使用 (|) 关联两个命令 将前一个命令的输出作为后一个命令输入

linux@ubuntu:~$ ls --help | more
常用的特殊符号

<1>.重定向符号 > 文件不存在,则新建,文件存在,覆盖原文件中的内容

linux@ubuntu:~$ cal > 1.txt
linux@ubuntu:~$ cat 1.txt
七月 2023
日 一 二 三 四 五 六
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31

<2>.追加重定向符号 >> 文件不存在则新建,文件存在,则追加在文件的末尾

linux@ubuntu:~$ date >> 1.txt
linux@ubuntu:~$ cat 1.txt
七月 2023
日 一 二 三 四 五 六
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
2023年 07月 30日 星期日 20:09:28 PDT

<3>.反引号 ``

linux@ubuntu:~$ echo today is date
today is date
linux@ubuntu:~$ echo today is `date` #将date当成命令来执行
today is 2023年 07月 30日 星期日 20:11:52 PDT

<4>.通配符

ln (创建链接文件)---->类似于windows快捷方式
硬链接
ln 源文件路径 硬链接文件
linux@ubuntu:~$ ln /home/linux/23072/LinuxC/day2/1.txt ying1.txt

软链接
ln -s 源文件路径 软链接文件
linux@ubuntu:~$ ln -s /home/linux/23072/LinuxC/day2/1.txt ruan1.txt

注意:
<1>.ln命令会保持每一处链接文件的同步性,也就是说,你不论改动哪一处,其他的文件也都会发生相同的变
化
<2>.软链接它只会在选定的位置上生成一个文件的镜像,不会重复占用磁盘空间
 硬链接它会在选定的位置上生成一个和源文件大小相同的文件。
find 在指定目录下搜索文件,它的使用权限是所有用户

find [路径] [选项] [描述]
当前路径 -name

压缩打包命令

gzip
linux@ubuntu:~/23072/LinuxC/day2$ gzip arr.c #压缩arr.c文件之后生成arr.c.gz
linux@ubuntu:~/23072/LinuxC/day2$ ls
1 arr1 arr.c.gz scores1 scores2.c str1
linux@ubuntu:~/23072/LinuxC/day2$ ls
1 arr1 arr.c.gz scores1 scores2.c str1 str2.c str3.c str4.c
str5.c
linux@ubuntu:~/23072/LinuxC/day2$ gzip -d arr.c.gz #解压
linux@ubuntu:~/23072/LinuxC/day2$ ls
1 arr1 arr.c scores1 scores2.c str1 str2.c str3.c str4.c
str5.c
linux@ubuntu:~/23072/LinuxC/day2$ gunzip scores.c.gz #解压
bzip2
linux@ubuntu:~/23072/LinuxC/day2$ bzip2 scores.c
linux@ubuntu:~/23072/LinuxC/day2$ ls
1.c arr1.c scores scores2 scores.c.bz2
linux@ubuntu:~/23072/LinuxC/day2$ ls
1.c arr1.c scores scores2 scores.c.bz2 str1.c str3 str4 str5
yanghui
linux@ubuntu:~/23072/LinuxC/day2$ bzip2 -d scores.c.bz2
linux@ubuntu:~/23072/LinuxC/day2$ ls
1.c arr1.c scores scores2 scores.c str1.c str3 str4 str5 yanghui
linux@ubuntu:~/23072/LinuxC/day2$ bunzip2 scores.c.bz2 #解压
tar: 对文件目录进行打包和解包
Examples:
tar -cf archive.tar foo bar # Create archive.tar from files foo and bar.
tar -tvf archive.tar # List all files in archive.tar verbosely.
tar -xf archive.tar # Extract all files from archive.tar.
-c, --create # create a new archive (创建包文件)
-f #指名包文件名
-x #解包
-v #显示打包的过程
-z #自动调用gzip,gunzip
-j #自动调用bzip2
打包+压缩
linux@ubuntu:~/23072/LinuxC$ ls
1.txt day1 day2 day3
linux@ubuntu:~/23072/LinuxC$ tar -cvzf mynew.tar.gz day1 day3 1.txt
day1/
day1/demo1.c
day1/demo1
day3/
day3/k.c
day3/j.c
day3/c.c
1.txt
linux@ubuntu:~/23072/LinuxC$ ls
1.txt day1 day2 day3 mynew.tar.gz
解压+解包
linux@ubuntu:~/23072/LinuxC$ ls
day2 mynew.tar.gz
linux@ubuntu:~/23072/LinuxC$ tar -xvzf mynew.tar.gz
day1/
day1/demo1.c
day1/demo1
day3/
day3/k.c
day3/j.c
day3/c.c
1.txt
linux@ubuntu:~/23072/LinuxC$ ls
1.txt day1 day2 day3 mynew.tar.gz

文件比较命令diff

linux@ubuntu:~/23072/LinuxC/day3$ diff a.c c.c #两个文件第5行不一样
5c5
< printf("helloworld\n");
---
> printf("helloxian\n");

Linux环境变量

linux@ubuntu:~$ env # 显示所有环境变量的值
CLUTTER_IM_MODULE=xim
LC_MEASUREMENT=zh_CN.UTF-8
LESSCLOSE=/usr/bin/lesspipe %s %s
LC_PAPER=zh_CN.UTF-8
LC_MONETARY=zh_CN.UTF-8
XDG_MENU_PREFIX=gnomeLANG=en_US.UTF-8
DISPLAY=:0
GNOME_SHELL_SESSION_MODE=ubuntu
COLORTERM=truecolor
DESKTOP_AUTOSTART_ID=1063e93a9771e6cb17169076453241065300000029110007
USERNAME=linux
linux@ubuntu:~$ echo $HOME #显示环境变量HOME的值
/home/linux
linux@ubuntu:~$ echo $PATH #显示环境变量PATH的值
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/loc
al/games:/snap/bin
linux@ubuntu:~$

临时修改变量的值 PATH

linux@ubuntu:~/23072/LinuxC/day3$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/loc
al/games:/snap/bin
linux@ubuntu:~/23072/LinuxC/day3$ export
PATH=$PATH:/home/linux/23072/LinuxC/day3
linux@ubuntu:~/23072/LinuxC/day3$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/loc
al/games:/snap/bin:/home/linux/23072/LinuxC/day3
linux@ubuntu:~/23072/LinuxC/day3$ cd
linux@ubuntu:~$ hello
hello
linux@ubuntu:~$ cd 23072
linux@ubuntu:~/23072$ hello
hello

永久修改变量的值 PATH 

linux@ubuntu:~$ sudo vim /etc/profile
linux@ubuntu:~$ reboot #重启计算机

Linux网络配置管理

测试虚拟机是否有网 (ping)

linux@ubuntu:~$ ping www.baidu.com
PING www.baidu.com (14.119.104.189) 56(84) bytes of data.
64 bytes from 14.119.104.189 (14.119.104.189): icmp_seq=1 ttl=128 time=34.6 ms
64 bytes from 14.119.104.189 (14.119.104.189): icmp_seq=2 ttl=128 time=33.8 ms
64 bytes from 14.119.104.189 (14.119.104.189): icmp_seq=3 ttl=128 time=33.3 ms
64 bytes from 14.119.104.189 (14.119.104.189): icmp_seq=4 ttl=128 time=33.2 ms

设置虚拟机的网络

查看ip地址

linux@ubuntu:~$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.12.143 netmask 255.255.255.0 broadcast 192.168.12.255
inet6 fe80::539c:dee:78b0:c099 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:0d:fd:67 txqueuelen 1000 (Ethernet)
RX packets 1020 bytes 142967 (142.9 KB)

设置固定IP地址

网络基础知识介绍

IP地址

IP地址:在网络中,IP地址是主机的唯一标识,由网络地址+主机地址
32位的二进制 ------->点分十进制("192.168.12.78")

子网掩码

网络地址部分全为1,主机地址部分全为0 (c类子网掩码 255.255.255.0) 

网关

DNS服务器 (域名解析服务器)

Linux软件管理

离线安装

linux@ubuntu:~/Desktop$ sudo dpkg -i sl_3.03-17build2_amd64.deb
Selecting previously unselected package sl.
(Reading database ... 484364 files and directories currently installed.)
Preparing to unpack sl_3.03-17build2_amd64.deb ...
Unpacking sl (3.03-17build2) ...
Setting up sl (3.03-17build2) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ..

apt高级软件包管理工具

linux@ubuntu:~$ sudo apt-get install vim #安装
Reading package lists... Done
Building dependency tree
linux@ubuntu:~$ sudo apt-get update #下载更新软件包列表
linux@ubuntu:~$ sudo apt-get install openssh-server #安装
Reading package lists... Done
Building dependency tree
linux@ubuntu:~$ sudo apt-get remove openssh-server #卸载

Windows和Linux文件共享

Day3

Linux用户管理

用户的定义

用户名 口令 用户ID 用户主目录 用户shell(bash)

相关的配置文件

<1>./etc/passwd 系统能够识别的用户清单
<2>. /etc/shadow 加密的用户清单, (打开时必须使用root权限)
<3>./etc/group 该文件包含Unix组的名称和每个组中的成员列表,每一行代表一组

管理命令(必须使用root权限)

创建用户 adduser

修改密码 passwd

修改用户的属性 usermod

删除用户 (deluser)

删除组 (groupdel)

shell编程

什么是shell编程

一堆shell命令集合

shell执行过程

创建一个.sh文件
touch 1.sh #1.创建.sh文件
修改文件的权限
chmod +x 1.sh #2.修改文件的权限
执行
./1.sh

注释

变量
用户自定义变量
命名规范
<1>.由数字,字母,下划线组成,首字母不能为数字
<2>.不能为关键字和保留字
<3>.尽量见名知意,尽量大写
访问shell变量
位置参数即命令行参数

由系统提供的参数为位置参数

预定义变量

$# 包含命令行参数的个数
$@ 包含所有命令行参数:"$1 $2 ...$9"
$* 包含所有命令行参数:"$1,$2.....$9" 
$$: 包含正在执行进程的ID号
$? 包含前一个命令退出的状态

环境变量
shell程序和语句
说明性语句

功能性语句
键盘读入变量值
算术运算命令 expr
test命令
1.测试字符串
s1 = s2 测试两个字符串的内容是否完全一样
s1!= s2 测试两个字符串的内容是否有差异
-z s1 测试s1字符串的长度是否为0
-n s1 测试s1字符串的长度是否不为0
2.测试整数
a -eq b 测试a与b相等 (equal)
a -ne b 测试a与b不相等
a -gt b 测试a是否大于b (great)
a -ge b 测试a是否大于等于b
a -lt b 测试a是否小于b
a -le b 测试a是否小于等于b
3.文件属性
-d name 测试name是否为一个目录
-f name 测试name是否为普通文件
-L name 测试name是否为符号链接
-r name 测试name是否存在且可读
-w name 测试name是否存在且可写
-x name 测试name是否存在且为可执行
-s name 测试name是否存在,且长度不为0
f1 -nt f2 测试文件f1是否比文件f2更新
f1 -ot f2 测试文件f1是否比文件f2更旧
结构性语句
顺序
1.read 输入
read -p "请输入一个整数
" NUM1
2.echo 输出
echo "NUM1=$NUM" #默认换行
echo -n "NUM1=$NUM" #表示不换行
选择
1.单分支
if [条件为真]
then
语句
fi

2.双分支
if [条件为真]
then
语句1
else
语句2
fi

3.多分支
if [条件1为真]
then
语句1
elif [条件2为真]
then
语句2
elif [条件3为真]
then
语句3
.....
else
语句n+1
fi

case 字符串变量 in
# 1|3|5|7
模式1|模式11|模式12)
语句1
;; #---->break
模式2)
语句2
;;
模式3)
语句3
;;
....
模式n)
语句n
;;
*)
语句n+1
;;
esac
循环

1.for
<1>.带列表的for


<2>.不带列表的for

<3>.类似于C的for  

  

2.while

while [条件为真]
do
语句
done

3.break :跳出循环

4.continue: 结束本次循环,继续下一次循环 

函数

函数的定义
方式一
函数名()
{
函数体
}

方式二
function 函数名()
{
函数体
}
函数的调用
方式一
value_name=`function_name arg1 arg2`
变量名=`函数名 参数1 参数2`
函数的所有标准输出都传递给了主程序的变量

方式二
function_name arg1 arg2
函数名 参数1 参数2
echo $? #$?上一个命令退出的状态

Day4

结构体

如何创建结构体数据类型

//定义结构体语句
struct 结构体名字
{
属性1;
属性2;
属性3;
.......
};

如何创建结构体变量

#include <stdio.h>
//定义一个学生的结构体数据类型
struct student
{
char name[20];
int height;
float scores[3];
};
//定义一个结构体数据类型,该名字叫struct student
int main(void)
{
//类型名 变量名;
//定义一个结构体变量并进行初始化
struct student s1={"lisi",183,{90,89,78}};
return 0;
}

如何访问变量的值

如何操作结构体的指针

内存管理

在堆区分配空间和释放空间

分配空间

#include <stdlib.h>
//参数:你要分配空间的大小
//返回值:void * void (表示空) void * (任何数据类型的地址)
//分配成功返回空间的首地址,失败则返回NULL
//malloc分配的空间未进行清空
void *malloc(size_t size);

释放空间

#include <stdlib.h>
//参数1:释放空间的首地址
void free(void *ptr);

结构体和堆区空间关联起来

在堆区创建5个存结构体的空间

#include <stdio.h>
#include <stdlib.h>
#define N 20
#define M 3
#define SIZE 5
//该句话是前两句话的简化
typedef struct student
{
char name[N];
int height;
float scores[M];
}Stu;
int main(void)
{
Stu * ps=NULL;
//1.分配空间
//再堆区创建5个存结构体的空间
ps=(Stu *)malloc(sizeof(Stu)*SIZE);
//2.出错判断
if(NULL==ps)
{
perror("malloc error");
return -1;
}
//3.释放
free(ps);
ps=NULL;
return 0;
}

编写一子函数,对ps指向的空间进行输入和输出

Day5

自定义头文件

自定义头文件的要求.h

如何引入自定义头文件

“” 和<>的区别

“”和<>的区别
“”: 编译器从用户的工作路径开始搜索头文件
<>: 编译器从标准库路径开始搜索头文件

条件编译

作用

避免头文件被重复引入

语法
//stu.c
#ifndef _STU_H
#define _STU_H
//<1>.引入库头文件
//<2>.宏定义
//<3>.结构体类型的定义
//<4>.枚举类型的定义
//<5>.函数声明
#endif

gcc工作原理

分阶段执行

1.预处理
gcc -E main.c -o main.i
2.编译
gcc -S main.i -o main.s
3.汇编
gcc -c main.s -o main.o
4.链接:
在连接阶段将输入的机器代码文件*.o(与其它的机器代码文件和库文件)汇集成一个可执行的二进制代
码文件

将四阶段合为一步

gcc stu.c -o stu

Make工程管理器 (多文件编译)

make工作原理

Makefile

Makefile中假目标

执行假目标
假目标出现的问题
如何解决和假目标同名的问题

Makefile变量

自动变量
<1>.$@ 目标文件
<2>.$^ 所有的依赖文件
<3>.$< 第一个依赖文件
预定义变量
Makefile预定义变量包含了常见编译器,汇编器的名称及其编译选项
<1>.CC C编译器的名称,默认为cc
<2>.CFLAGS C编译的选项,无默认值
<3>.RM 文件删除程序的名称,默认值为rm -
自定义变量

Makefile中变量的展开方式

递归展示方式
简单展开方式

Day6

函数指针

如何定义函数指针

//定义一个指向结构体的指针,该结构体的类型(Stu)
Stu * ps; (Stu)
//定义一个指向函数的指针,该函数参数为两个int,返回值為一个int的函数
                            函数的类型: 返回值类型 (参数列表)
                                         int (int,int) int add(int,int)
                              int (*pfun) (int,int)

定义一个长度为4的数组,该数组中的每个元素是个函数的指针

//定义一个长度为4的数组,该数组中的每个元素是个函数的指针
int ( *pfunArr[4] ) (int,int )={add,sub,mul,div};
//pfunArr[0]-->add pfunArr[1]->sub pfunArr[2]-->mul pfunArr[3]--div

函数参数可以是函数指针

//定义一个函数
//参数1:一个函数指针 函数类型(int (int ,int )) 参数2 int ,参数3 int
//返回值:int
int pfunaction(int (*pfun)(int,int),int num1,int num2);

函数指针也可以取别名 (typedef )

//给函数指针取了别名
typedef int (*PFUN) (int,int ); //给函数指针取了别名 int (*) (int,int) ---->PFUN
类型名
int (*pfun) (int,int);
PFUN pfun; 类型名 指针变量名;
int ( *pfunArr[4] ) (int,int )={add,sub,mul,div};

存储类型

register 寄存器

auto (默认)

存储类型 类型名 变量名

extern 外部的

变量

局部变量 :定义在函数体内部的变量,称为叫局部变量
作用域:自定义开始到最近}结束,函数作用域 ,块作用域
生命周期:函数调用分配,函数结束释放
全局变量:定义在函数体外部的变量,称为叫全局变量
作用域:自定义开始到文件 文件作用域

extern修饰全局变量
//show2.c
#include <stdio.h>
extern int a; //使用外部变量a
void show2(void)
{
a+=20;
printf("show2 a=%d\n",a);
}
extern修饰函数
#include <stdio.h>
//extern修饰函数:使用外部的函数
extern void show1(void);
extern void show2(void);
int main(void)
{
show1();
show2();
}

static 静态的

static修饰全局变量 (隐藏)
static修饰函数 (隐藏)
static局部变量:延长变量的生命周期

共用体

大小端

//测试计算机是大端序还是小端序
#include <stdio.h>
union un
{
int a;
char c;
};
int main(void)
{
union un u1;
u1.a=0x12345678;
if(u1.c==0x78)
{
printf("小端序\n");
}else
{
printf("大端序\n");
}
return 0;
}

枚举

//1.定义一个枚举的数据类型
enum timeDate
{
MONDAY=1,TUESDAY,WEDSDAY,THURSDAY,FRIDAY //默认是从开始的整数
};
//定义一个枚举数据类型,该数据类型的名字叫enum timeDate
//2.定义枚举的变量
enum timeDate d1;
d1的值可以是MONDAY,TUESDAY,WEDSDAY,THURSDAY,FRIDAY 任意一个

字节对齐

基本类型:自然对齐方式

结构体的对齐方式

位域(位段)

#include <stdio.h>
#define N 20
typedef struct mydate
{
    unsigned int year:11; //int的11位:
    unsigned int month:4;
    unsigned int day:5;
}Date; //缺点:不能通过scanf()输入
typedef struct student
{
    char name[N];
    int height;
    Date birday;
}Stu;
int main(void)
{
    Stu s1={"zhangsan",183,{2000,9,9}};
    printf("%10s %5d ",s1.name,s1.height);
    printf("%04d/%02d/%02d\n",s1.birday.year,s1.birday.month,s1.birday.day);
    printf("sizeof(Date)===%ld\n",sizeof(Date));
    return 0;
}

递归

一个数的阶乘

#include <stdio.h>
int jiecheng(int n)
{
    if(n==1)
        return 1;
    else
        return n*jiecheng(n-1);
}
int main(void)
{
    int n=0;
    printf("请计算某个数的阶乘\n");
    scanf("%d",&n);
    printf("%d\n",jiecheng(n));
}

斐波那契数列

#include<stdio.h>

int feibo(int n)
{
	if(n==1||n==2)
		return 1;
	else
		return feibo(n-2)+feibo(n-1);
}

int main(void)
{
	int i=0;
	for(i=1;i<=20;i++)
	{
		printf("%d  ",feibo(i));
	}
	printf("\n");
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值