【华清远见嵌入式培训】C基础

2023-11-17

Linux命令基础

1. Linux文件类型(bsp_lcd)七种

b:块(block)设备文件:存储设备(硬盘、SD卡) /dev/sd

s:套接字(socket)文件:网络编程

p:管道(pipe)文件:I/O编程

-:普通文件:.c文件 .h文件 .txt文件

l:软连接文件:类似快捷方式

d:目录(dirctor)文件:文件夹

c:字符设备文件:鼠标、键盘 /dev/input/mouse

2. Linux文件权限

chmod命令用于修改文件权限
	eg.
	chmod 777 file // 修改file文件的权限为用户、组内成员、其他用户均可读可写可执行

rwx rwx rwx 分别是(用户、组内成员、其他用户)

1. mkdir创建文件夹命令

常用的3个命令:

1.mkdir 目录名 // 创建一个空目录文件
	eg. mkdir test //在当前路径下创建一个名为test的目录
2.mkdir –p 绝对路径/目录名 // 在绝对路径中去创建一个空目录文件,如果该绝对路径下目录存在则直接在这个已存在的目录中去创建一个为目录名的空目录文件,如果该绝对路径下目录不存在,则直接在该绝对路径下去创建这个目录然后在这个目录下直接创建目录名的空目录文件
	eg. mkdir –p /home/stu/Desktop/New/test // 在绝对路径为/home/stu/Desktop/New/的目录下创建一个名为test的新目录, New可以不存在
3.mkdir 目录名1 目录名2 目录名3 ……   // 直接在当前位置创建目录名1和目录名2两个空目录文件,甚至可以更多

2. touch新建文件命令

touch [OPTION]… FILE…

如果当前目录下有同名文件,touch命令会更新时间戳,但不会修改内容

3. rm删除文件/目录命令

rm -r 目录文件名 —— 删除目录文件

rm 文件名.后缀 —— 删除普通文件

rm -rf 目录文件名 —— 强制删除目录文件

4. cp复制文件/文件夹命令

常用3个命令:

1.cp 文件名 目标路径  // 复制普通文件
2.cp -r 目录名 目标路径  // 复制目录文件 
3.cp 文件名 路径/新文件名 //  另存为

5. cd切换路径命令

常用3种命令:

1. cd+路径
2. cd+绝对路径  // 从根目录开始索引
3. cd+相对路径  //从相对于当前的路径开始索引

常见参数:

. 表示当前
.. 表示上一级
~ 家目录
/ 根目录
- 上一次的路径

gcc编译

gcc -o 可执行文件名 源文件名 
gcc -E 可执行文件

数据类型

使用bool类型需要添加语句

#include<stdbool.h>

vscode

int main(int argc, const char *argv[])

#argc是命令行总的参数个数;argv[]为保存命令行参数的字符串指针,其中第0个参数是程序的全名,以后的参数为命令行后面跟的用户输入的参数,argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。 指针数组的长度即为参数个数argc。数组元素初值由系统自动赋予。

也就是说,argv[i]是指向char类型的指针数组,指向char类型的i的首地址。而*char[i]就是指i这个字符串类型的内容

运算符及其次序

x++ 是指,先拿到x的值,然后再对x的值进行+1的操作

++x 是指,先对x的值进行+1的操作,再拿到x的值。

指针

  • 变量是对程序中数据存储空间的抽象

  • 内存单元的地址称为指针,专门用来存放地址的变量就叫做指针变量

  • 使程序更加简介紧凑高效,表示更加复杂的数据(数据结构)

  • 动态内存分配

  • 得到更多的返回值

  • <存储类型> <数据类型> * <指针变量名>

存储类型是指针变量本身的存储类型(一般是auto)

定义的指针要与所指向的变量类型相同

不进行初始化会产生野指针

指针修饰

  • const常量

修饰为只读模式,不可在函数内进行修改,会直接报错!

如果真的想修改,可以操作指针,取值操作进行修改

const int a = 10; // const修饰a
a = 20; // Error:Readonly

int a = 10, b = 20;
const int *p = &a; // const修饰*p
*p = 20; // Error:const修饰*p
p = &b; // 可以操作:可以改变指针指向

int *const p; // 修饰p,指针指向不能修改,但指针内容可以修改
*p = 20; // 可以操作
p = &b; // Error:不可以改变指针指向

const后是谁就修饰的是谁,修饰的内容不可以更改!

  • void

void *p; //表示任意类型的指针,不是空类型
void a; // Error:不可以修饰变量

大小端

大端:低地址存高字节

小端:低地址存低字节

1. 指针运算:对地址量进行运算

  • 对指针进行加减运算——看指针本身是什么数据类型

  • 地址常量不可以自加(++),可以+1

  • 两个指针相减的结果不是地址量,而是一个整数值,表示两指针之间相隔的数据的个数

二级指针(存放地址的地址)

int a = 10;
int *p = &a;
int **q = &p; // 二级指针

2. 指针与数组

  • 一维数组的数组名为一维数组的指针(起始地址)

指针与二维数组

  • 二维数组的每一行都看作一个一维数组,第一行就是a[0],第二行就是a[1]

*(a + 1) = a[1]; //两者等价
  • 二维数组名是一个行指针,而一维数组名是一个一级指针,上述操作实际上是给二级指针“降级”

由原来的移动一行到改变后的移动一列

行指针(数组指针)

存储行地址的指针变量,叫做行指针变量

<存储类型> <数据类型> (*<指针变量名>)

int a[2][3] / int (*p)[3]  // p的类型是int (*)[3] 运算步长为3
p = a;
printf("%d %d %d\n", a[1][1], p[1][1], *(*(a+1)+1));
// 三者表示元素相同,第三个先对a+1表示a前进一行,*括起来改变指针性质,行指针变成一级指针,后+1表示移动1列,再取值

3. 指针数组

本质是一个数组,数组元素是地址

int *a[n]; // 
  • 可以用于存放普通变量的地址

  • 用于存放二维数组每行第一列的地址

  • 用于存放字符串

  • 命令行参数

argv:指针数组,用来存放命令行传递的字符串

argc:表示argv中存储数据的个数,即命令行输入字符串的个数

4. 数组指针

函数

1. 定义格式

<返回值数据类型> <函数名> (<形式参数说明>){

		语句序列;

		return (<表达式>);

}

2. 调用格式

函数名称(<实际参数>) // 实际参数可以是若干个变量,也可以是若干个表达式

3. 参数传递

1. 值传递方式(常用)

调用函数将实参传递给被调用函数,被调用函数将创建同类型的形参并用实参初始

化;形参是新开辟的存储空间,因此改变形参不会影响实参,相当于实参赋值给形参

void func(int a, int b){ // int a = x, b = y;
    // ...
}
int main(){
    int x, y;
	func(x,y); //直接赋值操作
}

2. 地址传递方式(常用)

  • 通过形参的操作影响实参的值,将调用函数的参数本身传给被调用函数,**实参为变量的 地址 ,形参为同类型的 指针 **。

  • 为追求严谨,在不改变实参内容时,可以用const进行修饰!

void func(int *a, int *b){ 
    // ...
}
int main(){
    int x, y;
	func(&x, &y); //直接传递地址
}

3. 全局变量传参

将变量定义在所有函数外,同名变量全局皆可使用与修改,不建议使用

4. 数组传参

  • 全局数组传递方式

  • 复制传递方式(实参为数组的指针,形参为数组名(本质为一个指针变量)

int array_sum(int data[]); //形参为数组名,本质上是 int *data = a;
  • 地址传递方式(实参为数组的指针,形参为同类型的指针变量

int array_sum(int *data); // 本质也是一个数组指针

5. 动态开辟堆区空间

#include<stdlib.h>
void *malloc(size_t size);
void free(void *ptr);
free(p);
p = NULL;

malloc:在堆区开辟参数size大小空间,开辟成功返回开辟空间首地址;失败返回NULL

free:释放堆区ptr首地址空间

  • 使用手动开辟堆区空间时,注意内存泄漏:当指针指向开辟堆区空间后,又对指针重新赋值,则没有指针指向堆区空间首地址,会导致内存泄漏(就是相当于定义了一个指向堆区的指针,还没用就对这个指针重新赋值,开辟的空间没有指针去索引,造成内存泄漏)

  • 使用完空间及时释放

如果在子函数中开辟堆区空间,想在main函数拿到首地址有两种方式:返回值、地址传递

  1. // 返回值传递 #include <stdio.h> #include <stdlib.h> #include <string.h> char *fun() { char *p = (char *)malloc(32);// 栈区定义一个指针p指向堆区开辟的空间的首地址 strcpy(p, "hello"); return p; // 返回的是一个地址而不是指针,就是一串数字代表地址 } int main() { char *m =fun(); // 这里直接栈区定义 printf("%s\n", m); free(m); m=NULL; return 0; }

  1. // 地址传递 #include <stdio.h> #include <stdlib.h> void fun(char **p) // p = &m //*p == m { *p = (char *)malloc(32); //m指向堆区空间首地址 strcpy(*p, "hello"); } int main() { char *m = NULL; fun(&m); printf("%s\n", m); free(m); m = NULL; return 0; }

5. string函数族

  1. strcpy/strncpy函数

#include <string.h>
char *strcpy(char *dest, const char *src);
// src源字符串(const修饰不可更改);
// dest目标字符串
// 将源字符串复制给目标字符串
char *strncpy(char *dest, const char *src, size_t n);
// src源字符串(const修饰不可更改);
// dest目标字符串
// 将源字符串的前n个字符复制给目标字符串

该函数会覆盖目标字符串的对应字节长度的数据,例如

#include<string.h>
int main(){
	char dest[32] = "hellohello";
    char src[] = "world";
    strcpy(dest,src); 
    // 此时输出dest会显示“world",但其实只是占用了dest串的前6位(包含'\0'),后面还有"ello",只不过遇到'\0'就结束了
    strncpy(dest,src,3);
}

复制函数的原理如下

char *my_strcpy(char *dest, char *src){
    char *p = dest;
    while(*src){
        *dest = *src;
        dest ++;
        src ++;
    }
    return p;
}
char *my_strncpy(char *dest, char *src, int n){
    char *p = dest;
    while(n){
        *dest = *src;
        dest ++;
        src ++;
        n--;
    }
    return p;
}
  1. strlen函数

size_t strlen( const char *string );
  • strlen和sizeof区别

  1. strlen是一个函数,属于cstring库,用于计算指定字符串str的长度,不包括‘\0’

  1. sizeof是一个单目运算符,它的参数可以是数组、指针、类型、对象、函数等,sizeof在计算字符串长度时会包括‘\0’

  1. strcat/strncat函数

#include <string.h>
char *strcat(char *dest, const char *src);
// src源字符串(const修饰不可更改);
// dest目标字符串
// 将源字符串拼接在目标字符串后,前提不可以越界,越界会直接报错
char *strncat(char *dest, const char *src, size_t n);
// src源字符串(const修饰不可更改);
// dest目标字符串
// 将源字符串的前n位拼接在目标字符串后,前提不可以越界,越界会直接报错
  1. strcmp/strncmp函数

#include <string.h>
int *strcmp(char *string1, const char *string2);
// 将源字符串1与字符串2按字符的ASCII码值进行比较
// 第一个字符串大于第二个字符串,则返回大于0的数字
// 第一个字符串等于第二个字符串,则返回0    if(!strcmp(s1,s2)){}
// 第一个字符串小于第二个字符串,则返回小于0的数字
int *strncmp(char *string1, const char *string2);
// 将源字符串1与字符串2的前n个字符按字符的ASCII码值进行比较
// 第一个字符串大于第二个字符串,则返回大于0的数字
// 第一个字符串等于第二个字符串,则返回0    if(!strcmp(s1,s2)){}
// 第一个字符串小于第二个字符串,则返回小于0的数字

6. 指针函数

本质:函数,函数的返回值为指针

数据类型 *函数名(参数){
    ...
		return 地址;
        //return NULL;
		//return 0;
		//return -1;
}

*void malloc(size_t size);

  • 功能:手动申请空间,申请的空间在堆区

  • 参数:申请的空间大小

  • 返回值:任意类型指针

*void free(void ptr);

  • 功能:释放空间

  • 参数:要释放的空间

  • 返回值:无

7. 函数指针

本质:指针,指向函数的指针

格式:数据类型 (*函数指针变量名)(参数);

用法:

  • 当一个函数指针指向了一个函数,就可以通过这个指针来调用该函数,

  • 函数指针可以将函数作为参数传递给其他函数调用。

8. 函数指针数组

本质:数组,数组的内容为函数指针,但局限性太强,必须函数返回值个数和类型均相同

格式:数据类型 (*函数指针数组名[下标])(参数);
#include <stdio.h>
int add(int a, int b);
int sub(int a, int b);
int mul(int a, int b);

int main(int argc, const char *argv[])
{
	//数组:函数指针数组
	
	int (*st[])(int,int) = {add,sub,mul};   //4*3 = 12

    //int st[5];   sizeof(st)
	//add(3,4)
	//st[0](3,4);
	//st[0] = add; //数组名[下标],st[1] = sub;
	
	int i;
	for(i = 0; i < sizeof(st)/sizeof(st[0]); i++)
	{
		printf("%d\n",st[i](4,3));//实参
	}

	
	return 0;
}

int add(int a, int b)
{
	return a + b;
}

int sub(int a, int b)
{
	return a - b;
}

int mul(int a, int b)
{
	return a * b;
}

9. 递归

两个阶段:

  • 递推阶段:从原问题出发,按照递归递推,从未知到已知,最终达到递归终止条件

  • 回归阶段:按递归终止条件求出结果,逆向逐步带入递归公式,回到原问题求解

10. 结构体

结构体定义

  1. 常规定义

struct 结构体名{
    数据类型 变量名;
    ...
};

struct 结构体名 结构体变量名;
  1. typedef法(取别名)

typedef struct student {
	int num;
	char name[20];
	char sex;
}stu, * pstu;
// 给结构体类型起别名,叫stu,起了结构体指针类型的别名,叫pstu
typedef int INTEGER;
// 使用typedef可以对常规变量起别名
INTEGER i = 10;   // 使用时直接使用别名定义
  • sizeof(结构体)问题

理论上讲结构体的各个成员在内存中是连续存放的,和数组非常类似,但是,结构体占用内存的总大小不一定等于全部成员变量占用内存大小之和。在编译器的具体实现中,为了提高内存寻址的效率,各个成员之间可能会存在缝隙。用sizeof可以得到结构体占用内容在总大小,sizeof(结构体名)或sizeof(结构体变量名)都可以。

11.共用体

union 共用体名{
    成员列表
};
  • 结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存修改一个成员会影响其余所有成员

  • 结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。

12. 枚举类型

用来声明一组常数的用户自定义类型,用于提高代码的可读性

#include <stdio.h>
enum DAY
{
      MON=1, TUE, WED, THU, FRI, SAT, SUN
};
int main()
{
    enum DAY day;
    day = WED;
    printf("%d",day);
    return 0;
}

13. 存储类型

  1. auto(自动型):修饰局部变量,局部变量省略存储类型会默认auto

  1. static(静态型):可以修饰变量和函数

  • 修饰变量:

  1. 变量存放的位置在全局区(静态区)有初值存放.data区域,没有初值存放.bss区域

  1. 生命周期为整个程序

  1. 限制作用域

修饰局部变量:和普通局部变量的作用域没有区别,但是可以延长生命周期

修饰全局变量:限制在本文件中使用

  1. 只初始化一次,没有赋初值置为0

  • 修饰函数:被static修饰的函数只能在本文件中使用

  1. extern(外部引用):通过extern引用其他文件的全局变量或函数

有符号数与无符号运算时数强制类型转换方式及底层表示

#include <stdio.h>
int main(){
	int a = -1;
	unsigned int b = 1;
 
	if(a > b)
		printf("a > b, a = %d, b = %u\n", a, b);
	else
		printf("a <= b, a = %d, b = %u\n", a, b);
	exit(0);
} // 输出a > b

当执行一个运算时(如这里的a>b),如果它的一个运算数是有符号的而另一个数是无符号的,那么C语言会隐式地将有符号参数强制类型为无符号数,并假设这两个数都是非负的,来执行这个运算。这种方法对于标准的算术运算来说并无多大差异,但是对于像<和>这样的运算就可能产生非直观的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【华清远见嵌入式培训】C基础 的相关文章

  • Boost 安装在我的 Ubuntu 上的什么位置?

    我从 Boost 网站下载 Boost 1 54 tar 然后按照此处 1 详细说明进行操作 特别是 我想将我的 boost 库安装在文件夹中 HOME BOOST 使用这个 bootstrap sh prefix HOME BOOST 但
  • 无法从 Windows GUI 工具连接到远程 Linux 服务器上的 MySql 数据库

    我已经在 Amazon EC2 上的 Linux 服务器上设置了 mysql 数据库 这在本地效果很好 我可以登录 linux 盒子并管理 mysql 数据库 我正在尝试将本地 GUI 客户端连接到远程 mysql 但连接失败 我更新了 e
  • SO_BINDTODEVICE Linux 套接字选项的问题

    我有一台带有两个网卡的电脑 一 eth0 用于 LAN 互联网 另一个用于与一个微控制器设备进行 UDP 通信 微控制器有一个 IP 192 168 7 2 和一个 MAC 地址 第二个电脑网络适配器 eth1 有 192 168 7 1
  • Linux shell 根据第二列对文件进行排序?

    我有一个这样的文件 FirstName FamilyName Address PhoneNumber 如何按 FamilyName 排序 如果这是 UNIX sort k 2 file txt 您可以使用多个 k用于对多列进行排序的标志 例
  • 如果文件没有行尾字符,则 wc -l 不计算文件的最后一个

    我需要计算 unix 文件的所有行数 该文件有 3 行 但是wc l仅给出 2 个计数 我知道它不计算最后一行 因为它没有行尾字符 任何人都可以告诉我如何计算这一行吗 grep c返回匹配行的数量 只需使用一个空字符串 作为您的匹配表达式
  • 我们如何在使用循环时调用 ansible playbook 中的变量

    我有两个文件 其中这些文件包含server names and server IP s 我想更改 替换一些特定的server names and IP addressees根据要求在两个文件中 这与这篇文章 因为它被要求开设一个新职位 ht
  • 如何通过ssh获取远程命令的退出代码

    我正在通过 ssh 从远程计算机运行脚本 ssh some cmd my script 现在 我想在本地计算机上存储 shell 脚本的退出状态 我该怎么做 假设没有任何问题ssh其本身 其退出状态是在远程主机上执行的最后一个命令的退出状态
  • 选择fasta文件中氨基酸超过300个且“C”出现至少4次的序列

    我有一个包含蛋白质序列的 fasta 文件 我想选择超过 300 个氨基酸且半胱氨酸 C 氨基酸出现超过 4 次的序列 我使用此命令来选择具有超过 300 个 aa 的序列 cat 72hDOWN fasta fasta bioawk c
  • 应用程序中两个不同版本的库

    考虑一个场景 其中有两个不同版本的共享库 考虑 A 1 so 链接到 B so A 2 so 链接到 C so 现在 B so 和 C so 都链接到 d exe 当 B so 想要调用 A 1 so 中的函数时 它最终会调用 A 2 so
  • 如何将一个文本文件拆分为多个 *.txt 文件?

    我有一个文本文件file txt 12 MB 包含 something1 something2 something3 something4 有没有办法分开file txt分成 12 个 txt 文件 比方说file2 txt file3 t
  • 任何退出 bash 脚本但不退出终端的方法

    当我使用exitshell 脚本中的命令 该脚本将终止终端 提示符 有什么方法可以终止脚本然后停留在终端中吗 我的剧本run sh预计通过直接获取或从另一个脚本获取来执行 编辑 更具体地说 有两个脚本run2 sh as run sh ec
  • 使用 ioctl 在 C++ 中以编程方式添加路由

    我编写了简单的 C 函数 添加了新路线 void addRoute int fd socket PF INET SOCK DGRAM IPPROTO IP struct rtentry route memset route 0 sizeof
  • 更新Linux中的包含路径

    我的 my path to file 文件夹中有几个头文件 我知道如何将这些文件包含在新的 C 程序中 但每次我都需要在包含它之前输入头文件的完整路径 我可以在linux中设置一些路径变量 以便它自动查找头文件吗 您可以创建一个 makef
  • Ruby:在 Ubuntu 上安装 rmagick

    我正在尝试在 Ubuntu 10 04 上安装 RMagick 看起来here https stackoverflow com questions 1482823 is there an easy way to install rmagic
  • 在 x86 汇编语言中获取文件大小的简单方法

    假设我已经在汇编中打开了一个文件 并且在寄存器 eax 中有该文件的文件句柄 我将如何获取文件的大小 以便为其分配足够的缓冲区空间 我在这里研究了另一个讨论 建议使用sys fstat 28 系统调用来获取文件统计信息但无法实现它 My a
  • 嵌入清单文件以要求具有 mingw32 的管理员执行级别

    我正在 ubuntu 下使用 i586 mingw32msvc 交叉编译应用程序 我很难理解如何嵌入清单文件以要求 mingw32 具有管理员执行级别 对于我的例子 我使用了这个hello c int main return 0 这个资源文
  • 为 Linux 编译 Objective-C 应用程序(API 覆盖范围)

    我可能在这里问一些奇怪的问题 但我不确定从哪里开始 问题是我正在考虑使用 Obj C 和 Foundation 类在 Mac 上编写一个命令行工具 但存在一个非常大的风险 那就是我希望能够为不同的 Linux 发行版编译它 以便将来作为服务
  • Ubuntu Python shebang 线不工作

    无法让 shebang 线在 Ubuntu 中为 python 脚本工作 我每次只收到命令未找到错误 test py usr bin env python print Ran which python usr bin python 在 sh
  • 如何在 Linux 上通过 FTP 递归下载文件夹 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案
  • 为什么 fork 炸弹没有使 android 崩溃?

    这是最简单的叉子炸弹 我在许多 Linux 发行版上执行了它 但它们都崩溃了 但是当我在 android 终端中执行此操作时 即使授予后也没有效果超级用户权限 有什么解释为什么它没有使 Android 系统崩溃吗 一句话 ulimit Li

随机推荐

  • python反复运行清空plot图_仅清除matplotlib图的一部分

    我正在使用嵌入在Wx Python GUI中的matplotlib图来呈现一些数据 图中的内容 显示的数据 随点击按钮的功能不断变化 数据有两种类型 1 轮廓线 self axes contour x scale map y scale m
  • 并发锁的学习

    锁 锁的定义 锁是用来协调多个线程并发访问同一共享资源时带来的安全问题 频繁用锁必然会带来性能问题 但不用锁又会造成安全问题 1 从性能上分 乐观锁和悲观锁 乐观锁 CAS自旋锁 是非常经典的乐观锁 并发性能比较好 但是自旋会造成很大的开销
  • Python经典练习题——求水仙花数

    严格来说 我并不知道何谓 水仙花数 因为以前读书时根本没听过这种数 也不知道这种数有什么特征 后来从事编程之后反而听说了所谓的 水仙花数 如果通过网络查询 则发现水仙花数的定义也不统一 比如通过baidu百科查到如下定义 水仙花数 Narc
  • 元数据管理工具atlas初探

    元数据管理工具atlas初探 安装 Ambari添加服务 略 Hive配置 将atlas主节点 usr hdp 2 6 3 0 235 atlas hook拷贝到其他节点 自定义hive env HIVE AUX JARS PATH usr
  • 携手区块链技术,踏上可信“双碳”之路

    自中央明确提出碳达峰碳中和的 双碳 目标以来 区块链技术凭借能为碳排放 碳足迹打上可信标签的天赋异禀 引起了政策部门 学术界及产业实践代表们的高度重视 7月11日 在第33个全国节能宣传周之际 全国低碳日前夕 微众区块链联合金链盟 FISC
  • gcc生成静态库与动态库(附带使用方法)

    目录 前言 1 gcc生成静态库 从使用者的角度出发 如何使用别人的静态库 方法1 方法2 直接使用静态库 2 gcc生成动态库 动态库的使用 第二种方法 与使用静态库的方法一样 解决方案 方法3 ldconfig 配置 etc ld so
  • json解析豆瓣数据

    继续上次的文章 我们找到了json的数据包 那么证明我们可以获取到他们的数据 点击Headers Request URL对应的就是json数据的url 找到url之后我们就可以开始爬虫了 import requests import jso
  • Windows和Linux混合系统通过AD域实现用户集中认证

    一 Windows AD域 1 统一认证简介 管理的Linux服务器和Windows服务器如果很多 如果都用本地用户名管理 要管理和记住几十台甚至上百台服务器的不同账号不同密码 这是很难的 但是如果所有服务器账号密码都设置一样 那又完全没有
  • Unity的C#编程教程_59_字典 Dictionary 详解及应用练习

    文章目录 C Dictionary Introduction C Dictionary Looping through Dictionary C Dictionary When to Use C Dictionary Using Dicti
  • 自举电路原理

    文章目录 一 自举电路核心原理 二 为什么要自举升压 三 简单的自举电路模型 四 自举电路在高电压栅极驱动电路中的应用 1 MOS管Q开通时 2 MOS管Q关断时 一 自举电路核心原理 电容两端电压不能突变 根据电容公式 i t C du
  • 2023智源大会议程公开丨具身智能与强化学习论坛

    6月9日 2023北京智源大会 将邀请这一领域的探索者 实践者 以及关心智能科学的每个人 共同拉开未来舞台的帷幕 你准备好了吗 与会知名嘉宾包括 图灵奖得主Yann LeCun 图灵奖得主Geoffrey Hinton OpenAI创始人S
  • 使用AddN构建tensorflow简单图例

    import tensorflow compat v1 as tf import numpy as np Define a model a computational graph Parameters for a linear model
  • 宋浩线性代数笔记(二)矩阵及其性质

    更新线性代数第二章 矩阵 本章为线代学科最核心的一章 知识点多而杂碎 务必仔细学习 重难点在于 1 矩阵的乘法运算 2 逆矩阵 伴随矩阵的求解 3 矩阵的初等变换 4 矩阵的秩 去年写的字 属实有点ugly 大家尽量看
  • R语言备忘录

    title dataclear rbase author MengKe date 2023 03 12 output html document 1 Load R packages library ggplot2 library tidyr
  • p2b网络

    把p2b的工作推广到p2rb 目的 学习目标检测 熟悉目标检测 为自己写论文打基础 我的碎碎念 真的是fuck了 自己这个东西整了这么久 还是没有整出来 从5月分我就开始了把 因为考试 因为自己喜欢玩游戏 因为我tm真的浪费了好多时间 像个
  • Vue 基于ElementUI 封装table表格组件 + pagination分页组件

    效果展示 状态页面 用户页面 Vue 源码 定义封装组件 Pagination vue
  • c 中 中文乱码_Windows平台C语言程序在控制台显示中文乱码分析及解决

    前言 初学者在Windows平台上进行C C 语言 中文 程序开发时 有时会遇到编译报错 在控制台运行时显示中文乱码的问题 本文就此类问题进行描述 展开原因分析 然后给出解决方法 本次分享内容的目录如下 基本概念 字符集 字符编码 代码页
  • vue顶部一级菜单侧边二三级菜单

    侧边栏 顶部导航
  • 电脑主板接口_如何看电脑主板 M.2 接口是支持 SATA 还是 NVMe 固态硬盘?

    飚王出品 必是精品 你的电脑能 吃鸡 吗 这句话已经成为检验一台电脑配置是否过硬的标准之一 电脑是否能 吃鸡 除了 CPU GPU 必须强悍 内存要大外 选择固态硬盘也会在安装和加载游戏时有 加持 效果 NVMe M 2 固态硬盘 固态硬盘
  • 【华清远见嵌入式培训】C基础

    Linux命令基础 1 Linux文件类型 bsp lcd 七种 b 块 block 设备文件 存储设备 硬盘 SD卡 dev sd s 套接字 socket 文件 网络编程 p 管道 pipe 文件 I O编程 普通文件 c文件 h文件