自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(29)
  • 收藏
  • 关注

原创 Golang函数

Golang 函数func 函数名(参数)(返回值){函数体}//求两个数的差func subFn(x int,y int)int{ //如果x y 类型一样,可以省略写为:x,y intsub := x - yreturn sub}函数的可变参数可变参数是指参数的数量不固定,go语言中可变参数通过在参数名后加…来标识//求n个参数和func sumFn(x ...int)int{sum := 0for _, v := range x{sum += v}return su

2021-03-04 07:13:42 206

原创 Golang Map

map 是一种无序的基于Key_Value的数据结构,map是引用类型,必须进行初始化定义语法: map[KeyType]ValueTypefun mian(){// make创建map类型的数据var userinfo = make(map[string]string){userinfo["username"] = "张三"userinfo["userage"] = "18"userinfo["sex"] = "男"}userinfo["username"] // 张三// map

2021-02-28 16:11:09 154

原创 Go切片排序:选择排序,冒泡排序,sort包排序

选择排序选择排序,从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列//从小到大选择排序fun main(){var numSlice = []int{10,12,8,0,3,4}for i=0;i<len(numSlice);i++{for j := i+1;j<len(numSlice);j++{if numSlice[i] > numSlice[j] {temp := numSlice[i]numS

2021-02-24 22:24:16 299

原创 Golang中的切片

切片(Slice)是一个拥有相同类型元素可变长度的序列,它是基于数组类型的一层封装,支持自动扩容1.切片的声明var arr1=[]int{1,2,3,4}fmt.Printf("%v %T 长度:%v",arr1,arr1,len(arr1)) // [1 2 3 4] []int 长度:4var arr2=[]int{1:5,2:10,3:15,5:20}fmt.Printf("%v %T 长度:%v",arr2,arr2,len(arr2)) // [0 5 10 15 0 2

2021-02-22 22:09:50 423

原创 Golang byte和rune类型

Go语言的字符有以下两种:1.Uint8类型,又叫byte,代表了ASCII码的一个字符2.rune类型,代表了UTF-8字符当需要处理中文或者其他复合字符时,则需要使用rune类型,rune类型实际是一个int32.1.定义字符用单引号' '定义,golang中定义字符,字符属于int类型var a = 'a'fmt.Printf("值: %v 类型: %T",a,a) // 输出结果为a对应的ASCII码值97,类型:uint8; 如果需要原样输出,可用%c输出2...

2021-02-04 22:14:33 707

原创 Golang数据类型

Golang 数据类型go语言数据类型分为:基本数据类型 & 复合数据类型基本数据类型包括:整型,浮点型,布尔型,字符串型复合数据类型包括:数组,切片,结构体,函数,map,通道(channel),接口…一、整型分为两大类:有符号整型按长度分:int8,int16,int32,int64 (位),有符号整型第一位代表符号位(0负1正)对应无符号整型:unit8,unit16,unit32,unit64 (均为正数)unitptr 无符号整型,用于存放一个指针(特殊类型)通过uns

2021-02-01 00:33:45 948 1

原创 go语言基础(一)

一.Print / PrinlIn / Printf 的用法及区别1.Print / Println区别a.Print不会自动换行,Println会自动换行输出b.如果一次输出多个值时,Print中间没有空格,Println中间会有空格输出package main import "fmt"func main() { fmt.Println("A","B","C") fmt.Print("A","B","C")}2.Printlln / Printf区别a.Printf在实际

2021-01-24 23:42:25 146

转载 linux:Signal ()函数

1. 功能设置某一信号的对应动作2. 声明#include typedef void (*sighandler_t)(int);sighandler_t signal(int signum, sighandler_t handler);3. 参数说明 第一个参数signum:指明了所要处理的信号类型,它可以取除了SIGKILL和SIGSTOP外的任何一种信号。   第二

2017-11-20 16:53:45 185

原创 linux:exec系列进程替换函数

一.exec替换进程映像引:fork函数是用于创建一个子进程,该子进程几乎是父进程的副本,而有时我们希望子进程去执行另外的程序,exec函数族就提供了一个在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段,在执行完之后,原调用进程的内容除了进程号外,其他全部被新程序的内容替换了。exec系列

2017-11-20 16:44:03 2152

原创 数据结构:队列

队列:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列的数据元素又称为队列元素。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从

2017-11-14 12:24:42 270

原创 数据结构:顺序栈与链栈

栈(stack):概念:栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈是允许在同一端进行插入和删除操作的

2017-11-13 15:10:57 643

原创 C语言:可变参数编程

可变参数编程:一般我们编程的时候,函数中形式参数的数目通常是确定的,在调用时要依次给出与形式参数对应的实际参数。但在某些情况下我们希望函数的参数个数可以根据需要确定,因此c语言引入可变参数函数。典型的可变参数函数的例子有printf()、scanf()等int printf(constchar *format, ...);int scanf(constchar *f

2017-11-11 23:14:19 341

转载 Linux系统调用的实现机制分析

1       系统调用意义linux内核中设置了一组用于实现系统功能的子程序,称为系统调用。系统调用和普通库函数调用非常相似,只是系统调用由操作系统核心提供,运行于核心态,而普通的函数调用由函数库或用户自己提供,运行于用户态。 一般的,进程是不能访问内核的。它不能访问内核所占内存空间也不能调用内核函数。CPU硬件决定了这些(这就是为什么它被称作"保护模式")。为了和用户空间上运行的进

2017-11-05 10:51:31 320

原创 数据结构:不带头结点的单链表

不带头结点的单链表:1.不带头结点的单链表操作中,除了初始化,头插,尾插,删除,操作与带头结点的单链表有差别外,其它的操作基本上一样。2.链表指针直接指向了首元节点,因此在首元节点前插入数据元素或者删除首元节点元素都会改变头指针的值。所以这里要引入二级指针。typedef struct NNode{ int data; struct NNode *next;}N

2017-11-04 09:20:27 7582 2

原创 数据结构:单链表,循环链表,双项链表的实现

单链表:单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。①:链表通过每个结点的链域(指针域)将线性表的n个结点按其逻辑顺序链接在一起的。②:每个结点只有一个链域的链表称为单链表

2017-11-03 15:18:41 339

原创 linux:关于fork()的例题

下面这段代码输出几个a?int main(){ fork()||fork(); printf("a\n"); exit(0);}答案是3个,下面我们来一起分析一下:父子进程的pid是题目的关键,pid=0,ppid!=0.或(||)的关系下第一个fork()为真,就无需判断第二个,两个fork()均为0时,结束。所以这段代码可以输出三个a

2017-11-01 09:22:52 641

原创 老鼠试药问题

问题:现有一千瓶药水,其中九百九十九瓶是完全一样的,只有一瓶里面是毒药,但是外观上分辨不出来。毒药给小白鼠喝了后,一星期后这只小白鼠会突然死亡,但之前一点症状也没有。现需要在一星期后找出哪瓶是毒药,问至少需要几只小白鼠?这是一个求最优解的问题。这个问题需要把一个老鼠能使用的信息用到极致,即能达到最优解。问题解析:巧妙利用二进制编号是这道问题的关键1.给每个瓶子用

2017-10-31 21:29:09 1966

原创 linux:僵死进程

在linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个 进程完成它的工作终止之后,它的父进程需要调用wait()或者waitpid()系统调用取得子进程的终止状态。  孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。孤儿进程将被init进

2017-10-31 08:11:25 301

原创 linux:fork()函数

一起学习Linux下的C编程,就从利用fork开辟一个新的进程开始吧。我们先来谈一谈fork()函数:fork函数函数原型pid_t fork( void);(pid_t 是一个宏定义,其实质是int 被定义在#include中)!返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程ID;否则,出错返回-1函数说明一个现有进程

2017-10-30 15:23:58 342

原创 linux:进程 & 页表

在学习liinux的过程中,多处渗透着操作系统的知识,下面做一些自己对于fork函数的理解的总结。fork函数系统调用可实现进程的复制,那么我们先说一说进程。进程,主要包含三个元素:o. 一个可以执行的程序; o. 和该进程相关联的全部数据(包括变量,内存空间,缓冲区等等); o. 程序的执行上下文(execution context)。一个进程表示

2017-10-29 20:46:07 5038

原创 C语言:机器的大小端

C语言中判断大小端的方法 :所谓的大端模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;小端模式相反。为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元都对应着一个字节,一个字节为8bit。但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于

2017-10-28 16:21:39 206

原创 C语言:内存重叠

内存重叠:拷贝的目的地址在源地址范围内。所谓内存重叠就是拷贝的目的地址和源地址有重叠。在函数strcpy和函数memcpy都没有对内存重叠做处理的,使用这两个函数的时候只有程序员自己保证源地址和目标地址不重叠,或者使用memmove函数进行内存拷贝。memmove函数对内存重叠做了处理。下面举例一个可能会发生内存重叠的问题:有n个整数,使前面的各数顺序向后移m个位置

2017-10-27 13:37:36 625

原创 C语言:文件函数 fopen(),fclose(),fwrite(),fread()

文件打开函数:fopenfopen函数是在当前目录下打开一个文件,其调用的一般形式为:文件指针名=fopen(文件名,使用文件方式); ex:FILE *fr = fopen(srcpath,"r");FILE *fw = fopen(despath,"w");FILE *fr =fopen("c:\\1.test","rb");其意义是打开C驱动器磁盘

2017-10-26 16:25:17 3968

原创 linux:int main(int argc,char *argv[],char *envp[])

int     main(   int   argc   ,   char   *argv[ ]   ,   char   *envp[ ]   ) 详解: main函数的参数列表保存了输入参数的信息:第一个参数argc记录了输入参数的个数。第二个参数是字符串数组的,字符串数组的每个单元是char*类型的,指向一个c风格字符串,arg[ ]指向的数组中至少有一个字符指针,即ar

2017-10-24 18:36:16 1482

原创 C语言:递归

递归算法:递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数).如何设计递归算法1.确定递归公式2.确定边界(终了)条件递归与栈:函数递归是利用系统中栈进行操作的,通过对栈帧的一系列操作,从而实现递归。这个过程是由系统

2017-10-24 12:23:55 3992 1

原创 C语言:结构体

struct:“结构体”是一种构造数据类型,现在一般叫做用户自定义数据类型,它是由若干“成员”组成的。 每一个成员可以是一个基本数据类型或者又是一个构造类型。 结构即是一种“构造”而成的数据类型, 那么在说明和使用之前必须先定义它,也就是构造它。如同在说明和调用函数之前要先定义一样。定义一个结构的一般形式为:

2017-10-24 09:37:16 232

原创 C语言:字符串函数的实现

字符串函数:如何自己编写strlen,strcpy, strcat, strcmp, atoi , itoa1.strlen:计算字符串长度.它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符'\0'为止,然后返回计数器值(长度不包含'\0')。int Mystrlen(const char

2017-10-23 20:25:02 386

原创 C语言:动态内存malloc,calloc,realloc

动态内存是用户无法确定空间大小,或者空间太大,栈上无法分配时,会采用的一种内存分配方式。一:分配内存空间函数malloc: 调用形式: (类型说明符*) malloc (size) 功能:在内存的动态存储区中分配一块长度为"size" 字节的连续区域。函数的返回值为该区域的首地址。 “类型说明符”表示把该区域用于何种数据类型。(类型说明符*)表示把返回值强制转换为该类型指针。“

2017-10-21 13:25:55 280

原创 C语言:断言,指针的算数运算

一:断言的使用:assert(断言):断言该结果一定成立。如果表达式为真则忽略,否则终止崩溃。相当于一个if语句:if(假设成立){     程序正常运行;}else{     终止程序(避免由程序运行引起更大的错误) }1.断言在debug版本下显示,在release版本下assert自动失效。2.在调试结束后,可以通过在包含#include

2017-10-17 09:00:42 418

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除