【华清远见嵌入式培训】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基础 的相关文章

  • 如何不断刷新屏幕并实时更新[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想在linux上写一个C程序 不断刷新屏幕并实时更新 例如类似于top终端中的命令 谁能指出我正确的方向 为了保持它跨终端类型的可移
  • 如何在Python中独立于语言安装(linux)获取用户桌面路径

    我找到了 如何找到用户桌面的路径 的几个问题和答案 但在我看来它们都已失效 至少我找到的那些 原因是 如果用户安装的 Linux 不是英语 他或她的桌面很可能位于除 Desktop 例如 对于瑞典语 我相信它是在 Skrivbord 谁知道
  • Linux shell 脚本:十六进制数字到二进制字符串

    我正在 shell 脚本中寻找一些简单的方法来将十六进制数字转换为 0 和 1 字符的序列 Example 5F gt 01011111 是否有任何命令或简单的方法来完成它 或者我应该为其编写一些开关 echo ibase 16 obase
  • 为什么 Linux 对目录使用 getdents() 而不是 read()?

    我浏览 K R C 时注意到 为了读取目录中的条目 他们使用了 while read dp gt fd char dirbuf sizeof dirbuf sizeof dirbuf code Where dirbuf是系统特定的目录结构
  • 设置 Apache POI 的路径

    我想创建 Excel 文件并使用 java 程序在该文件中写入数据 That is here http www techbrainwave com p 554我在 java 文件所在的位置提取了 Apache POI 并将该路径包含在路径变
  • Linux shell 脚本中的 while 循环超时

    这工作正常 无限循环 while TRUE do printf done 我在尝试着timeout this while loop与timeout命令 所有这些都不起作用 timeout 5 while TRUE do printf don
  • arm-linux-gnueabi 编译器选项

    我在用 ARM Linux gnueabi gcc在 Linux 中为 ARM 处理器编译 C 程序 但是 我不确定它编译的默认 ARM 模式是什么 例如 对于 C 代码 test c unsigned int main return 0x
  • 在 Linux 上的 Python 中使用受密码保护的 Excel 工作表

    问题很简单 我每周都会收到一堆受密码保护的 Excel 文件 我必须解析它们并使用 Python 将某些部分写入新文件 我得到了文件的密码 当在 Windows 上完成此操作时 处理起来很简单 我只需导入 win32com 并使用 clie
  • .NET Core 中的跨平台文件名处理

    如何处理文件名System IO以跨平台方式运行类以使其在 Windows 和 Linux 上运行 例如 我编写的代码在 Windows 上完美运行 但它不会在 Ubuntu Linux 上创建文件 var tempFilename Dat
  • 并行运行 make 时出错

    考虑以下制作 all a b a echo a exit 1 b echo b start sleep 1 echo b end 当运行它时make j2我收到以下输出 echo a echo b start a exit 1 b star
  • 为什么我收到的数据包数据大小大于mss?

    我在两台 PC 上使用 ifconfig ethX mtu 300 修改了 MTU 并使用 netperf 测试网络 我用 WireShark 嗅探了 SYN 数据包中的 MSS 260 但我得到了一些大于 260 的数据包 为什么 嗅探器
  • 如何修复“iptables:没有该名称的链/目标/匹配”?

    我在我的 Linux 嵌入式系统上构建并安装了 iptables 如果我列出所有规则 则一切正常 iptables list Chain INPUT policy ACCEPT target prot opt source destinat
  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • Elasticsearch 无法写入日志文件

    我想激活 elasticsearch 的日志 当我运行 elasticsearch 二进制文件时 我意识到我在日志记录方面遇到问题 无法加载配置 这是输出 sudo usr share elasticsearch bin elasticse
  • 创建 jar 文件 - 保留文件权限

    我想知道如何创建一个保留其内容的文件权限的 jar 文件 我将源代码和可执行文件打包在一个 jar 文件中 该文件将在使用前提取 人们应该能够通过运行批处理 shell 脚本文件立即运行示例和演示 然后他们应该能够修改源代码并重新编译所有内
  • Bash 解析和 shell 扩展

    我对 bash 解析输入和执行扩展的方式感到困惑 对于输入来说 hello world 作为 bash 中的参数传递给显示其输入内容的脚本 我不太确定 Bash 如何解析它 Example var hello world displaywh
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • nginx 上的多个网站和可用网站

    通过 nginx 的基本安装 您的sites available文件夹只有一个文件 default 怎么样sites available文件夹的工作原理以及如何使用它来托管多个 单独的 网站 只是为了添加另一种方法 您可以为您托管的每个虚拟
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • 如何在 shell 脚本中并行运行多个实例以提高时间效率[重复]

    这个问题在这里已经有答案了 我正在使用 shell 脚本 它读取 16000 行的输入文件 运行该脚本需要8个多小时 我需要减少它 所以我将其划分为 8 个实例并读取数据 其中我使用 for 循环迭代 8 个文件 并在其中使用 while

随机推荐

  • 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文件