LinuxC学习体验

结构体的定义

Strcut--->用来声明这是一个结构体

Struct +结构体名
{
数据1;
数据2;
......
};

内部的数据类型全部由个人自己进行定义,用户创建的结构体作为一个数据类型而存在

结构体访问内部成员

结构体定义好只是一个数据类型,如果要访问内部的成员,需要用到结构体变量或者结构体指针。

结构体变量

Tyepdef重命名

Typedef  int  int_t;

结构体指针

通过结构体数据类型来定义结构体指针

结构体嵌套

结构体是一个复合的数据类型,内部的成员是简单的和复杂的数据类型,但是同时还可以包括结构体

Struct people
{
Char name[20];
Int age;
};

Struct student
{
Int score;
};

现在将这两个结构体进行嵌套

Struct people
{
Char name[20];
Int age;
Struct student s;  //struct student *s;如果使用指针,一定会有一个学生类型的结构体变量
};

计算结构体的大小

Struct people
{
Char name[29];
Int age;
Double height;
}

在计算结构体大小的时候,先看结构体内部成员的数据类型有没有超过4个字节,如果没有,就按照最大的数据类型进行对齐,如果超过4字节,就按照4字节对齐。

以空间换时间

结构体数组

数组:同一类型元素的集合。

结构体数组:是一个数组,只不过数据的类型是结构体类型

Struct people
{
Char name[20];
Int age;
};
Struct people a,b,c;
Struct people Arr[3] = {{“aa”,1},{“bb”,1},{“cc”,1}};

}};--->结构体数组

访问内部元素:arr[0].name;arr[0].age;

  1. 变量的数据类型---》去掉变量名

函数

返回值  函数名(形参)

{

结构;

}

返回值:

  1. 库函数,系统调用,接收程序执行的结果
  2. 判断函数调用是否成功
  3. Return 0;主函数结束

函数的本质:存在于内存上的一段二进制代码

函数名:二进制代码的入口地址

共用同一片内存空间

Union a

{

Int a;

Char b;

Short c;

};

#include <stdlib.h>
void *malloc(size_t size);
在堆区申请空间

参数:申请的空间大小
返回值:成功返回空间首地址,失败返回NULL

因为malloc的返回值是void *,所以在申请空间成功之后,根据所申请到的空间进行强制类型转换
Int * p= (int *)malloc(sizeof(int)*5);

#include <string.h>
void *memset(void *s, int c, size_t n);
作用:清空空间(任何空间)
参数1:空间的首地址
参数2:用来清空空间的字符
参数3:清空空间的大小

Memset(p,0,sizeof(int)*5);

void free(void *ptr);
清空空间
参数:空间的首地址


 void *realloc(void *ptr, size_t size);
参数1:空间的首地址
参数2:扩容的大小
返回值:扩容后的空间首地址
如果malloc之后的放不下,那么重新开辟空间进行存放,空间的首地址会改变,原本malloc的内容会被复制

如果放得下,那么就在malloc空间之后进行开辟,空间首地址不变

枚举

枚举内部的元素相当于给数字起别名。

#define M 4--->宏定义
Typedef int int_t;


enum A
{
malloc_ok,
Input_ok,
Output_ok,
};

递归函数

在子函数的内部,自己调用本身的子函数

Int digui(int sum)
{
If(1 == sum)
{
Return 1;
}

}

Main()
{
Digui(100);
}


For(i=0;i<100;i++)

一个函数具有的功能,需要不断地进行更新,那么就可以写成递归函数(所要实现的功能复合一定的规律)

命令表

预处理  gcc -E 1.c -o 1.i 头文件展开,去掉注释,发生宏替换

编译    gcc -S 1.i -o 1.s

汇编    gcc -c 1.s -o 1.o

链接    gcc 1.o -o 1

结构体

Int  double

结构体是自定义的数据类型   

Struct lion
{
Char name[20];
Struct tager ta; /*ta
};
Struct lion l;

可以通过结构体数据类型定义结构体变量和结构体指针

结构体数组

一片连续的空间,内部数据是结构体类型

Typedef Struct student
{
Char name[20];
Int age;
}STU;

STU s[5];

S[0]~s[4]

For(i=0;i<5;i++)
{
Scanf(“%s”,s[i].name);
}

SHELL

外壳,保护,跟外界交互的桥梁

这个是命令行提示符,需要在这里输入命令

执行命令之后,系统会给出相应的操作--->交互

Shell在系统当中叫命令行解释器,在/bin里面有所有的命令。

将在命令行提示符输入的字符串,去/bin目录下找同名的字符串,如果找到,那么就进行对应的操作,如果没有 command not found(去/bin找文件,而不是翻译成01二进制)

Bash是一个进程,打开一个终端就会有一个bash产生

查看当前所有运行的进程 ps -aux

Cat

在终端上查看当前文件的内容

Head/tail  + 文件名  查看文件头/尾  十行的内容

More/less 

More和cat相似 less之后会显示当前文件的内容,不会显示命令行提示符

Grep 查找(查找已知文件内部的内容)

Grep+ 参数+需要查找的内容 + 路径/文件名

参数

-n:显示所查找的内容

-v:显示除了所查找的内容之外的所有内容

-c:显示查找内容的行数

-R:查找内容的行数,并标红

Find + 路径 + -name + 文件名---》显示路径下所有查找的同名文件

查找命令具体的用法:  man  1 命令名称

数字标记法

Chmod + 权限 + 文件名   权限:000~777,但是文件的权限要给奇数位减1,所以是666

字符标记法

用户:u

用户组:g

其他用户组:o

所有:a

Chmod u+x 1.c  --->给用户增加可执行的权限

Chmod a-r 1.c ---> 给所有用户都取消可读的权限

临时修改( 绝对路径修改)

Export PATH=/home/linux/23091:${PATH}--->${PATH}

临时修改实在某一个终端上进行的,取消临时修改只需要关闭修改过的终端

永久修改

修改配置文件 ~/.bashrc

拉到最后一行,添加 临时修改PATH的命令

再修改的终端上查看PATH,不会显示修改后的结果,但是重新打开终端之后,PATH会变成修改过的PATH

软转义和硬转义

对于env来讲(PWD)

软转义:输出特定字符内部的内容  echo $PWD echo “${PWD}”--->两个意义相同,都输出/honme/linux

硬转义:输出特定的字符   echo ‘${PWD}’ echo ‘$PWD’---->${PWD}/$PWD

管道    |

Command 1 | command 2 | ......| command n

将管道前的一个命令的输出,当作后一个命令的输入

``命令置换的符号

Command1 `command2`

将后一个的输出当作前一个的参数

重定向

标准输入:stdin

标准输出:stdout

输入重定向:<

输出重定向:>

一般不使用输入重定向

为什么需要使用输出重定向?

将文件的内容可以快速的输入到另一个文件当中

>:目标文件不存在会创建,如果源文件不存在并且目标文件有内容,会清空目标文件(覆盖)

>>:追加模式,每一次重定向之后都会追加到目标文件原文本的后面。如果源文件不存在,使用>>,并不会清空目标文件原本的内容

2>:将信息重定向到目标文件,不会出现内容,目标文件不存在会创建。如果源文件不存在,目标文件会存放错误信息

2>>:以追加的方式保存错误信息,正确信息不会覆盖错误信息

&>:保存正确和错误信息,会覆盖

&>>:保存正确和错误信息,会追加

shell脚本的写法

  1. 先创建一个后缀名为.sh的文件
  2. 声明解释器,书写代码
  3. 更改文件的权限为可执行 chmod u+x XXX.sh
  4. 运行   ./XXX.sh

.sh文件第一行只能书写#! /bin/bash

$@,$*:去掉可执行文件之后,剩余的内容

$#:去掉可执行文件之后,剩余的内容的个数

$?:上一行代码的瑞出状态,正常退出0

结构性语句

结构特性语句和测试命令一般同时使用

If 命令

then

命令表

Elif 命令

Then

命令表

。。。

Else

Then

命令表

fi

文件名一定是一个字符串,判断文件是否存在,用-n

判断文件是否存在并且长度不为零  -s

一个字符串可能是文件名,也可能是普通的字符串,首先要判断字符串是否存在,然后在字符串存在的基础上,判断这个字符串到底是文件名还是文件夹名

Case

Case 变量 in

模式)

命令表 ;;

模式)

命令表 ;;

模式)

命令表 ;;

模式)

命令表 ;;

.........

For

for 格式 in 格式表

do

命令表

Done

While

while 命令

Do

 命令表

Done

当while的测试命令为真,或者直接写true,那么while就是一个死循环。

SHELL函数

SHELL函数也是函数,但是SHELL是一个弱类型,没有数据类型的区分,所以SHELL

函数没有形参

add()

{

Echo “aaaa”

Echo “bbbb”

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值