- 博客(46)
- 收藏
- 关注
原创 多个进程操作同一个文件
两个子进程只是拷贝这个文件描述信息,两个子进程都是使用着同一个文件指针,读取的是一样的文件描述信息。两个进程之间时相互独立的,子进程拷贝父进程的全部的内存空间,当 两个 fr = open(filename,'rb')在父进程中创建,则文件的一部分就会丢失。进程通过该指针 拿着文件描述符 对应文件描述符的某一项,就可以查到文件对应的结构,就得到了文件的具体信息。因此父进程打开的所有文件描述符都在子进程中保存了(每个进程都有独立的描述符)。用两个进程读写同一个文件的,分别保存文件的上部分,和下部分。
2024-10-10 21:26:39
480
原创 threading模块中的自定义线程Thread
t.start()启动线程,则就会自动的去调用类里面的run方法,run就是去调用target传递过来的函数地址。2.重写__init__方法添加自己的属性,使用super加载父类属性,2.调用start自动执行run方法。3.调用join回收线程。1.继承Thread。
2024-10-10 16:21:19
279
原创 multiprocessing 中的共享内存Value,Array
Array共享内存读写:通过遍历obj可以得到每个值,直接可以通过索引去修改值。只用于字节串 可以使用obj.value直接打印共享内存中的 字节串。data 整数则表示开辟孔吉纳的大小,其他数据类型表示开辟空间。参数:ctype表示共享内存数据类型(一组共享数据中的类型必须全部一致)obj.value 对该属性的修改查看即对共享内存读写。功能:开辟单一共享内存 注意:共享内存只能有一个值。注意:当data为字符串的时候,需要转换为字节串。参数:ctype 表示共享内存的类型。
2024-10-10 13:59:50
259
原创 进程通信multiprocessing中的Pipe
在内存中开辟管道空间,生成管道操作对象,多个进程使用同一个管道对象进行读写即可实现通信。multiprocessing 中管道只能用于有亲缘关系进程中。参数:要写入的数据(数据可以是整形,字符串,列表,字典等。管道对象在父进程中创建,子进程通过父进程获取。如果:duplex = False则表示单向管道。如果是单向fd1只读,fd2只写。返回值 :表示管道两端的读写对象。参数:默认表示双向管道。功能:从管道获取数据。返回值:获取到的数据。功能:向管道写入内容。
2024-10-09 23:31:14
229
原创 父子进程之间关于对全局变量的修改同步问题
子进程会复制父进程的内存状态,但它们的变量是独立的。如果需要在父子进程之间共享数据,可以使用模块中的Value或Array,或者使用Manager进行更复杂的数据共享。用大白话来说,子进程被创建,在父进程中创建的列表,字典等,包含列表,字典中的值都会被复制,所有,子进程是可以对列表,字典进行遍历的,但是,任何进程之后在对列表,字典中的值进行修改的时候,任何进程中的列表,字典将不再会修改,也就是说,之后的每个进程对列表,字典的修改是互不影响的。
2024-10-07 23:02:29
400
原创 static关键字
https://www.bilibili.com/video/BV1U44y1y7xN?p=23&spm_id_from=pageDriver&vd_source=48095c32d8f7553fa3edc9770e2c17dc
2022-08-31 23:39:40
177
原创 用C语言实现my_OFFSETOF
思路:有个struct类型的指针指向第一个成员,该成员的地址从0开始,内存是以字节为单位,那么其它成员所在的地址就是相对于结构体开头的字节偏移量,size_t是一些C/C++标准在stddef.h中定义的,size_t 类型表示C中任何对象所能达到的最大长度,它是无符号整数描述C 库宏 offsetof(type, member-designator) 会生成一个类型为 size_t 的整型常量,它是一个结构成员相对于结构开头的字节偏移量。成员是由 member-designa...
2022-04-27 20:41:00
1060
原创 strrchr函数
<string.h>描述C 库函数 char *strrchr(const char *str, int c) 在参数 str 所指向的字符串中搜索最后一次出现字符 c(一个无符号字符)的位置。声明下面是 strrchr() 函数的声明。char *strrchr(const char *str, int c)参数str -- C 字符串。 c -- 要搜索的字符。以 int 形式传递,但是最终会转换回 char 形式。返回值该函数返回 str 中最后一次.
2022-04-20 20:03:55
2261
原创 strchr函数
C 库函数 char *strchr(const char *str, int c) 在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。声明下面是 strchr() 函数的声明。char *strchr(const char *str, int c)参数 str -- 要被检索的 C 字符串。 c -- 在 str 中要搜索的字符。返回值该函数返回在字符串 str 中第一次出现字符 c的位置,如果未找到该字符则返回 NULL。...
2022-04-20 20:01:24
194
原创 用C语言实现my_strstr
char* strstr(const char* dest, const char* src); 在字符串dest中,找src第一次出现在dest字符串的位置,并返回,不包含'\0'返回值:第一次在dest找到的地址,没有找到返回NULLdest--目标字符串src--所要查找字符串#include<stdio.h>#include<string.h>#include<assert.h>char* my_strstr(const char.
2022-04-19 11:20:32
470
原创 用C语言实现memset
描述C 库函数 void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。声明下面是 memset() 函数的声明。void *memset(void *str, int c, size_t n)参数 str -- 指向要填充的内存块。 c -- 要被设置的值。该值以 int 形式传递,但是函数在填充内存块时是使用该值的无符号字符形式。 n -- 要被设置...
2022-04-14 21:43:31
1217
原创 用C语言实现my_memcmp
int memcpy(const void* ptr1, const void* ptr2, size_t num);从ptr1和ptr2指向的位置开始比较大小返回值:ptr1 > ptr2, 返回大于0的数ptr1 < ptr2, 返回小于0的数ptr1 == ptr2, 返回等于0的数大小端存储模式:大端存储模式:低权值(字节)存储在高地址,高权值(字节)存储在低地址小端存储模式:低权值(字节)存储在低地址,高权值(字节)存储在高地址#i...
2022-04-14 21:00:26
469
原创 用C语言实现my_memmove
memmovevoid* memmove(void* dest, const void* src, size_t num);void* dest --- 接收任意类型的指针,指向指向存储数据源的目标地址const void* src --- 不可被修改的,接收任意类型的指针,指针指向复制的数据源size_num --- 复制的大小,单位字节memmove从src中复制num个字节的内容到dest中,如果遇到dest和src重叠的数据源,memmove函数会保证数据被覆盖前将字节...
2022-04-14 20:14:31
396
原创 用C语言实现my_memcpy
memcpyvoid* memcpy(char* dest, const void* src , size_t num);memcpy从src指向的位置开始,拷贝num个字节到dest指向的位置,当src指向的内容为'\0'时,拷贝也不会停止。当遇到重叠拷贝时,库memcpy函数也会拷贝成功,my_memcpy则不会。void* 无类型指针,可以存放任何类型的地址,但不能进行解引用操作 和 加减整数操作,,,通过指针名,指针名是地址,可以比大小#include<s...
2022-04-14 13:10:48
477
原创 用C语言实现my_strncat
char* (char* dest, const char* src , size_num);返回值:dest目标数组的起始地址注意:当追加个数大于源字符串的长度时,则追加完源字符串后,直接在目标字符串后加'\0'当追加个数小于源字符串的长度时,则追加个数为0后,在目标字符串后加'\0'特别注意:while(*ret++){;}ret--;------------>ret等于'\0'之后,ret再次++,因为时后缀...
2022-04-13 22:04:50
191
原创 用C语言实现my_strncmp
int strncmp(const char* str1 , const char* str2, size_num);比较到两个字符串不一样 或者 比较到其中一个字符串结束 或者 size_num个结束;返回值:当str1大于str2时,返回大于0的数;当str1小于str2时,返回小于0的数;当str1等于str2时,返回等于0的数;#include<stdio.h>#include<string.h>#include<assert.
2022-04-13 21:16:37
262
原创 用C语言实现my_strncpy
char* strncpy(char* dest, const char* src, size_count);用途:从stc源字符串中拷贝size_count个到dest目标数组中。注意:源字符串不可被修改,目标字符串可以被修改,并且有足够的空间容纳源字符串。当追加的个数(size_count)大于源字符串时,则追加完源字符串后,继续追加'\0'直至要追加个数当追加的个数(size_count)小于源字符串时,则追加完源字符串后,不会自动追加'\0'...
2022-04-13 20:37:47
221
原创 用C语言实现my_strcat
字符串的结束标志时'\0'char* strcat(char* dest, const char* src);源字符串时不可以被修改的,目标数组时可以被修改的,目标数组有足够大的空间容纳要追加的字符串的大小源字符串必须以'\0'结束strcat函数的返回值:返回目标数组的起始位置#include<stdio.h>#include<string.h>#include<assert.h>char* my_strcat(char* de
2022-04-13 20:05:01
228
原创 用C语言实现my_strcmp
int strcmp(const char* str1, const char* str2);返回值:(vs编辑器返回1,-1,0)(gcc,返回两字符的差值)str1 大于 str2 时,返回一个大于0的数;str1 小于 str2 时,返回一个小于0的数;str1 等于 str2 时,返回一个等于0的数;#include<stdio.h>#include<string.h>#include<assert.h>int my_strcmp(c
2022-04-13 19:45:57
560
原创 C语言中的strtok函数
char* strtok(char* str, const char* seq);seq参数时一个字符串,其定义了一个或多个的分隔符的字符集合第一个参数指定一个字符串, 这个字符串里包括一个或多个seq参数的字符集合strtok函数找到str中的下一个标记,并将其用\0结尾,返回一个指向这个小字符串的指针strtok函数会改变操作的字符串,所有在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改第一个参数不是NULL时,strtok函数查找str下一个标记,以\0结尾,strto
2022-04-13 19:04:19
1438
原创 用C语言实现杨氏矩阵
题目:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下也是递增的,请编写一个程序在这样的矩阵中查找莫个数字是否存在.1 2 33 4 56 7 8一:以最右上方一个数为标准(3),当要查找的数大于(3)时,则找的数不可能在数字(3)这一行,行++。当要查找的数小于(5)时,则要找的数不可能在数字(5)这一列,所以列++;二:以最左下方一个数为标准(6),当要查找的数大于(6)时,则找的数不可能在数字(3)这一列,列++。当要查找的数小于(5)时,则要找的数不可能在数字(5)这一行
2022-04-12 11:38:10
156
原创 写一个函数判断一个字符串是否是另一个字符串旋转之后的字符串
注意注意:目标数组的容量足够容纳追加后的字符串strcat()函数不能自己追加自己“abcdef\0”->" bcdefa"....->" abcdef“没有'\0',。。。。'\0'是字符串的结束标志描述strcatC 库函数 char *strcat(char *dest, const char *src) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾。声明下面是 strcat() 函数的声明。char *strcat(char *dest,...
2022-04-11 23:28:00
338
原创 用C语言实现函数可以左旋k个字符串
题目:函数可以左旋k个字符串?例如:"abcdef" 左旋2 后“cdefab”方法一:#include<stdio.h>#include<string.h>#include<assert.h>void left_move(char* pa, int k){ assert(pa != NULL); //断言 int len = strlen(pa); //字符串长度 int i=0; for(i=0;i<k;i++){ //左旋几
2022-04-11 21:41:24
232
原创 用C语言实现my_qsort函数
#include<stdio.h>int cmp_int(const void* e1, const void* e2){ return *(int*)e1 - *(int*)e2;}void swap(char* buf1, char* buf2, int width){ int i=0; for(i=0;i<width;i++){ //一次char*(走一个字节),交换一个类型的宽度 char temp = *buf1; *buf1 = *buf...
2022-04-10 23:03:32
258
原创 字符数组与常量字符串
字符数组的数组名是字符串的首元素地址,这里的字符串可以被修改,const 常量字符:指针指向的首元素的地址里面的内容不可被修改,#include<stdio.h>int main(){ char str1[] = "hello world!"; // 字符串数组 char str2[] = "hello world!"; const char* str3 = "hello world!"; //常量字符串 const char* str4 = "hello world!
2022-04-10 19:03:02
214
原创 用C语言实现对菱形的打印
注意:空格,星星与行数的关系。#include<stdio.h>int main(){ int line=0; //控制行数 scanf("%d",&line); //上半部分 int i=0; for(i=0;i<line;i++){ int j=0; //打印空格(递减) for(j=0;j<line-1-i;j++){ printf(" "); } //打印星星(递增) for(j=0;j&.
2022-04-10 09:15:01
365
原创 用C语言判断是否为水仙花数(自幂数)
#include<stdio.h>#include<math.h>//C 库函数 double pow(double x, double y) 返回 x 的 y 次幂,即 x^y。//实现水仙花数(自幂数)double my_pow(int n,int k){ if(k > 0){ return n * my_pow(n,k-1); } else if(k == 0) return 1; else return 1.0 / ( n*my_pow.
2022-04-09 21:51:52
477
原创 用C语言实现整形,浮点型,字符串,结构体的排序
方法一:只能实现整形排序(冒泡排序)#include<stdio.h>void bubble_sort(int arr[], int sz){ int i=0; for(i=0;i<sz-1;i++){ int flag = 0; int j=0; for(j=0;j<sz-1-i;j++){ if(arr[j] > arr[j+1]){ int temp = arr[j]; arr[j] = arr[j+1];...
2022-04-06 22:28:03
1565
原创 用C语言简单实现加减乘除
//简单实现加减乘除//函数指针数组#include<stdio.h>void nume(){ printf("***********************\n"); printf("**** 1.Add 2.Sub ****\n"); printf("**** 3.Mul 4.Div ****\n"); printf("*****5.Eor 0.exit ****\n"); printf("***********************\n"); }...
2022-04-06 13:29:51
4842
原创 用C语言简单实现加减乘除等计算
//对回调函数的理解#include<stdio.h>void nume(){ printf("***********************\n"); printf("**** 1.Add 2.Sub ****\n"); printf("**** 3.Mul 4.Div ****\n"); printf("*****5.Eor 0.exit ****\n"); printf("***********************\n"); }int Add(int.
2022-04-06 13:16:25
699
原创 哈夫曼树的概念与特点
基本概念:路径:结点与结点的分支构成这两个结点之间的路径路径长度:从一个结点到另一个结点所经过的分支的个数结点权:带权路径长度:从根结点到该根结点的路径长度乘以改结点的权树的带权路径长度:树的带权路径长度是指树中所有的叶子结点的带权路径长度之和,通常记作WPL。哈夫曼树:又称最优二叉树,是指带权路径最小的二叉树。构造哈夫曼树1.满二叉树不一定是哈夫曼树。2.每个...
2022-04-05 21:18:03
2458
原创 用C语言恶搞你的好朋友strcmp()
C语言 strcmp() 函数用于对两个字符串进行比较(区分大小写)。strcmp() 会根据 ASCII 编码依次比较 str1 和 str2 的每一个字符,直到出现不到的字符,或者到达字符串末尾(遇见\0)。返回值:如果返回值 < 0,则表示 str1 小于 str2。 如果返回值 > 0,则表示 str2 小于 str1。 如果返回值 = 0,则表示 str1 等于 str2。#include<stdio.h>#include<stdl...
2022-04-05 10:30:24
593
原创 用C语言实现n的k次方项
实现思想:k值分3种情况:整数,负数,0;#include<stdio.h>double pow(int n, int k){ if(k < 0) return 1.0/(pow(n,-k)); 返回值浮点类型,运算符左右操作数必须有一个浮点数 else if(k > 0) return n*pow(n,k-1); else return 1; }int main(){ int n,k; printf("请输入两个数:\n"); sc
2022-04-04 21:31:47
177
原创 对arr与&arr的理解
-----arr与&arr的区别1.sizeof(数组名),这里的数组名是表示的是整个数组,计算的是整个数组的大小。2.&数组名,这里的数组名是整个数组,取出的是整个数组。3.除此之外的数组名是首元素的地址。-----指针1.指针是一个变量,用来存放地址的,地址是唯一标识一块内存空间的2.指针的大小的是4/8,32位/64位3.指针类型决定了指针访问内存的大小,指针类型决定了指针加减整数的步长4.指针的运算(指针-指针,是计算元素的个数,两个指针必须指向同一空
2022-04-04 20:42:32
992
原创 用C语言实现参数二维数组的使用
#include<stdio.h>#define ROW 2#define COL 3//定义print void print(int (*pa)[COL], int row, int col); int main(){ int a[ROW][COL] = {{1,2,3},{4,5,6}}; //调用print print(a,ROW,COL); //a是首元素的地址,这里的首元素地址是第0行一维数组的地址 // 1 2 3 --->int[3] .
2022-04-04 19:59:46
345
原创 有C语言实现求二进制中的所有的奇数位和偶数位
& 按位与---同1才1| 按位或---有1就1^ 按位异或---同0异1#include<stdio.hj>int main(){ int data,i=0; printf("请输入一个数:\n"); scanf("%d",&data); printf("二进制中奇数:\n"); for(i=31;i>=1;i-=2){ printf("%d ",1&(data>>i) ); // 第一次左移31,按位与1得到第
2022-04-01 10:03:32
447
原创 有C语言实现判断大小端
1. 什么是大小端存储模式? -大端存储模式:将数据的低位放在内存的高地址的#include<stdio.h>int check_sys(){ int i=1; return *(char*)&i; // 强制类型转换}int main(){ int ret = check_sys(); if(ret == 1) printf("小端存储模式\n"); else printf("大端存储模式\n"); return 0; }...
2022-03-31 21:37:09
127
原创 用C语言实现my_strcpy
基本思路:将你所需要的字符串逐一拷贝到目的地字符串里,包括'\0'。注意:1、'\0' 是字符串的结束标志, 2、目的地所在的容量必须比所需要的字符串要来的大。#include<stdio.h>#include<assert.h>char* my_strcpy(char* dst, const char* scr){ //const修饰使scr里的内容不可被修改 assert(*scr != NULL && *dst...
2022-03-31 20:34:26
399
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人