自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 手把手带你函数栈帧的创建和销毁(通过内存和图解)

前言本篇文章是在VS2013环境下调试的在研究函数栈帧的创建和销毁时,建议不要使用太高级的编译器,越高级的编译器,越不容易观察函数的栈帧创建和销毁的过程。 同时,函数栈帧创建和销毁的过程在不同编译器下是有略微差异的,但大体上是一致的,具体细节取决于编译器的实现。那么什么是函数栈帧呢?每一个函数调用,都会在栈上创建一个空间,而这个在栈区上为函数创建的空间就叫做函数栈帧。接下来就开始关于函数栈帧的创建和销毁的学习吧!寄存器首先,让我们先了解有哪些寄存器,有eax,ebx,ecx,edx……我

2021-08-08 20:01:52 558 2

原创 【指针进阶完结篇】指针和数组的笔试题解析(内存与图解)

sizeof(数组名),这里的数组名表示整个数组,计算的是整个数组的大小。&数组名,这里的数组名表示整个数组,取出的是整个数组的地址。除此之外所有的数组名都表示首元素的地址。一维数组#include<stdio.h>#include<string.h>int main() { int a[] = {1,2,3,4};//4*4 = 16 printf("%d\n",sizeof(a)); //16 -sizeof(数组名)-计算的是数组...

2021-07-25 18:23:32 354 3

原创 linux进程概念

管理的理念:先描述,在组织,可以转化成对目标的管理,转化成为对数据的管理

2022-03-14 19:38:51 4579

原创 简单了解操作系统

冯诺依曼体系结构我们常见的计算机,如笔记本。我们不常见的计算机,如服务器,大部分都遵守冯诺依曼体系。截至目前,我们所认识的计算机,都是有一个个的硬件组件组成输入设备:键盘,磁盘,网卡,显卡,话筒,摄像头等输出设备:显示器,磁盘,网卡,显卡,音响等存储器(内存)运算器&&控制器(CPU)关于冯诺依曼,必须强调几点:这里的存储器指的是内存不考虑缓存情况,这里的CPU能且只能对内存进行读写,不能访问外设(输入或输出设备)外设(输入或输出设备)要输入或者输出数据,也

2022-03-07 15:22:28 3318

原创 Linux环境基础开服工具使用

Linux 软件包管理器 yum什么是软件包··在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.··但是这样太麻烦了,于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上,··通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装. 软件包和软件包管理器, 就好比 “App” 和 "应用商店"这样的关系.··yum(Yellow dog Updater, Modified)是Linux下

2022-03-06 21:30:29 355

原创 string类的介绍与使用【STL】

1. 什么是string类string 是 STL 六大组件中的容器中的一个, 那么1.1 什么是STL呢?STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。在工作中网上有句话说:“不懂STL,不要说你会C++”。STL是C++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。1.2 如何学习STL呢?第

2022-03-04 12:51:11 423

原创 模板初阶【C++】

1. 泛型编程如何实现一个通用的交换函数呢?void Swap(int& left, int& right){ int temp = left; left = right; right = temp;}void Swap(double& left, double& right){ double temp = left; left = right; right = temp;}void Swap(char& left, char&

2022-03-01 11:24:09 215

原创 Linux权限(演示)

Linux权限的概念Linux下有两种用户:超级用户(root)、普通用户。超级用户:可以再linux系统下做任何事情,不受限制普通用户:在linux下做有限的事情。超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。命令: su [用户名]功能:切换用户。例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。Linux权限管理01.文件访问

2022-02-28 11:02:57 231

原创 Linux基本指令

01. ls 指令语法: ls [选项][目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件一样显示,而不是显示其下的文件。 如: ls –d 指定目录-i 输出文件的 i 节点的索引信息。 如 ls –ai 指定文件-k 以 k 字节的形式表示文件的大小。 ls –alk 指定文件-l 列出文件的详细信息。-n 用数字的 UID,GID 代替名称。 (

2022-02-26 17:32:09 233

原创 内存管理【C/C++】

1. C/C++内存分布我们先来看下面的一段代码和相关问题int globalVar = 1;static int staticGlobalVar = 1;void Test(){ static int staticVar = 1; int localVar = 1; int num1[10] = { 1, 2, 3, 4 }; char char2[] = "abcd"; char* pChar3 = "abcd"; int* ptr1 = (int*)malloc(sizeof(i

2022-02-20 15:43:45 141

原创 类与对象(下)【C++】

1. 再谈构造函数设已有A、B、C、D4个类的定义,程序中ABCD的构造函数、析构函数调用顺序是怎样的?class A{public: A() { cout << "A()" << endl; } ~A() { cout << "~A()" << endl; }};class B{public: B() { cout << "B()" << endl; } ~B() { cout

2022-02-18 16:15:40 387

原创 类与对象(中)【C++】

1.类的6个默认成员函数如果一个类中什么成员都没有,简称为空类。空类中什么都没有吗?并不是的,任何一个类在我们不写的情况下,都会自动生成下面6个默认成员函数。class Date {};2. 构造函数2.1 概念对于以下的日期类:class Date{public: void SetDate(int year, int month, int day) { _year = year; _month = month; _day = day; } void Display(

2022-02-16 17:02:54 178

原创 类与对象(上)【C++】

1.面向过程和面向对象初步认识C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。2.类的引入C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。struct Student{void SetStudentInfo(const char* name, const char* gender, int age){ strcpy(_name, n

2022-02-14 17:10:29 136

原创 基础知识【C++入门】

1、C++输入&输出新生婴儿会以自己独特的方式向这个崭新的世界打招呼,C++刚出来后,也算是一个新事物,那C++是否也应该向这个美好的世界来声问候呢?我们来看下C++是如何来实现问候的。#include<iostream>using namespace std;int main(){ cout<<"Hello world!!!"<<endl; return 0;}说明:使用cout标准输出(控制台)和cin标准输入(键盘) 时

2022-02-13 17:24:19 2132

原创 命名空间【C++入门】

我们在看C++代码的时候,常常会看到一行这样的代码using namespace std;那它是干嘛的呢? 其实这就是我们所说的命名空间,因为命名冲突问题而产生的命名冲突问题1、我们自己定义的变量、函数可能会和库里面重名冲突;2、做大项目时,需要多人协作,两个同事写的代码,命名冲突;C语言没有办法很好的解决这个问题,所以,C++提出了一个新语法,命名空间看如下这段代码#include<stdio.h>#include<stdlib.h>int rand =

2022-01-10 17:48:35 354

原创 Leetcode 225【队列实现栈】(c语言版)

队列实现栈oj链接实现思路c语言实现代码#include<stdio.h>#include<stdlib.h>#include<stdbool.h>#include<assert.h>typedef int QDataType;// 链式结构:表示队列 typedef struct QListNode{ struct QListNode* next; QDataType data;}QNode;// 队列的结构

2021-09-27 11:13:40 248

原创 leetcode 232【用栈实现队列】(c语言版)

用栈实现队列在Leetcode上有这道题,链接oj链接实现思路由于队列先进先出和栈先进后出原则,所以我们需要用两个栈才能实现队列c语言实现#include<stdio.h>#include<stdbool.h>#include<stdlib.h>#include<assert.h>typedef int STDataType;typedef struct Stack{ STDataType* a; int top;

2021-09-27 10:50:49 307

原创 【数据结构之队列】

队列的概念及结构队列的实现单链表Queue.h#pragma once#include <stdio.h>#include <stdbool.h>#include <assert.h>#include <stdlib.h>typedef int QDataType;typedef struct QueueNode{ struct QueueNode* next; QDataType data;}QNode;typedef

2021-09-26 15:21:32 145

原创 【数据结构之栈】

栈的概念及结构栈的实现结构选择分析一下,用哪种结构实现较好?顺序表 or 链表这么我用的顺序表代码实现Stack.h#pragma once#include <stdio.h>#include <stdbool.h>#include <assert.h>#include <stdlib.h>typedef int STDataType;typedef struct Stack{ STDataType* a; int

2021-09-26 00:17:22 158

原创 【数据结构之双向链表】

前言上一篇我们已经学过了单链表,了解了其结构,不知道大家有没有发现单链表的缺陷链表结构现实中要实现的链表结构非常多样,有8种链表结构:无头单向非循环链表结构简单,一把不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈希桶、图的邻接表等等,另外这种结构在笔试面试中出现很多。带头双向循环链表结构最复杂,一般用在单独存储结构。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后发现结构会带来很多优势,实现反而简单了,后面我们代码实现

2021-09-25 15:54:13 207

原创 【数据结构之单链表】

前言上一篇我们已经写完顺序表了,那么顺序表有什么缺点呢,如何解决?链表的概念及结构单链表实现SList.h#define _CRT_SECURE_NO_WARNINGS#pragma once#include<stdio.h>#include<stdlib.h>typedef int SLTDataType;struct SListNode//定义结点{ SLTDataType data;//数据 struct SListNode* next;//指

2021-09-25 11:51:31 163

原创 【数据结构之顺序表】

顺序表概念:顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。静态顺序表SeList.h#define _CRT_SECURE_NO_WARNINGS 1#pragma once#

2021-09-24 23:08:48 328

原创 【指针】何为指针及优缺点

什么是指针?指针最为简短的定义:指针即为内存的地址。那什么是内存呢?举个栗子:当我们计算 4*(46+4)时,我们人脑会想到先有个中间值 50 然后再计算成 200,计算机也会这样有一个 50 的中间值,我们人脑在计算的时候 50 这个中间值保存在我们的万能的脑子中,计算机在出现最终答案前也会把这个中间值一个方便它进行下一步计算的地方,这地方就是内存。实际上我们写程序的时候定义的所有变量都保存在内存中, 可以想象一个大的程序所占用的内存是不容小觑的,在计算机刚被制造出来的时候那些大佬是如何节省

2021-08-24 22:10:41 2796 1

原创 【指针进阶08】回调函数

回调函数一个通过函数指针调用的函数回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的, 用于对该事件或条件进行响应。code1#include<stdio.h>void print(char* str){ prinft("hehe:%s", str);}void test(void(*p)(char*)){ printf("test\n"); p("bit");}int main(){ test(pr

2021-08-18 20:47:39 147 2

原创 【指针进阶07】指向函数指针数组的指针

回顾1.数组指针int arr [10] = { 0 };int ( * pa ) [10] = &arr;p是一个指向整型数组的指针。2.函数指针数组int ( * pf) ( int , int )int ( * pfArr [4] ) ( int , int );pfArr是一个数组 - 函数指针的数组指向函数指针数组的指针指向函数指针数组的指针是一个指针, 指针指向一个数组,数组的元素都是函数指针;int ( * ( * ppfArr ) [4]) ( int

2021-08-18 10:17:35 578

原创 【指针进阶06】函数指针数组

函数指针数组把函数的地址存到一个数组中,那这个数组就叫函数指针数组;int ( * parr1 [10] ) ( );parr1先和 [ ] 结合,说明parr1是数组,数组的内容是什么呢?是 int(*)() 类型的函数指针。这个还是很好理解的。code1用函数指针数组存放函数int Add(int x, int y)//int(*)(int,int){ return x + y;}int Sub(int x, int y){ return x - y;}i

2021-08-18 09:48:06 2087

原创 【指针进阶05】函数指针

函数指针是指向函数的指针 - 存放函数地址的一个指针int ( * ) ( int , int )看代码code1#include<stdio.h>int Add(int x,int y){ return x + y;}int main(){ int a = 10; int b = 20; int(*pf)(int, int) = &Add; printf("%d\n", pf(2, 3)); printf(

2021-08-17 10:28:42 145

原创 【指针进阶04】数组传参和指针传参

前言在写代码的时候难免要把【数组】或者【指针】传给函数,那函数的参数该如何设计呢?数组传参一维数组传参两种形式 - - - 传值和传址void test(int arr[]) {} void test(int arr[10]) {} void test(int* arr) {} void test2(int* arr[20]) {}

2021-08-16 21:49:48 324

原创 【指针进阶03】指针数组

前言本章东西不多,非常容易,主要以举例,练习为主。指针数组- - 是数组,用来存放指针的int arr[10] = { 0 };//整型数组char ch[5] = { 0 }; //字符数组int* parr[4]; //存放整型指针的数组 -- 指针数组char* pch[5]; //存放字符指针的数组 -- 指针数组code1#include<stdio.h>int main(){ int a = 10; int b = 20;

2021-08-15 20:21:59 97

原创 【指针进阶02】数组指针

前言回顾上一章字符指针可以发现不同指针间的区别int *p=NULL; p 是整型指针 - 指向整型的指针 - 可以存放整型的地址char *pc=NULL; pc是字符指针 - 指向字符的指针 - 可以存放字符的地址数组指针 – 指针数组指针 - 指向数组的指针 - 存放数组的地址数组指针的组成char* arr[5];char* (*pa)[5] = &arr;// char *:pa指向的数组的元素类型是char// pa : 指针变量的名字// *

2021-08-14 22:41:04 161 1

原创 在字符串中找出第一个只出现一次的字符(两个角度)。

在字符串中找出第一个只出现一次的字符。(七夕先放个老婆)!!!这是一道2006年Google的笔试题在字符串中找出第一个只出现一次的字符。如输入 “abaccdeff” ,则输出 ‘b’ 。要求时间复杂度为 O(n)。以空间换时间需要开辟新空间,这样才能保住时间符合要求#include<stdio.h>#include<assert.h>char Find_First_one(char *a, int n){ int newNum[256] = { 0

2021-08-14 20:46:41 312 1

原创 【指针进阶01】字符指针

字符指针指向字符型数据的指针变量。每个字符串在内存中都占用一段连续的存储空间,并有唯一确定的首地址。即将字符串的首地址赋值给字符指针,可让字符指针指向一个字符串。话不多说,直接上代码test1int main(){ char ch = 'w'; char * pc = &ch; const char* p = "hello bit";//"hello bit"是一个常量字符串 printf("%s\n", p); printf("%c\

2021-08-13 22:10:08 150

原创 qsort排序各种类型的数据

qsort可以排序任意类型的数据qsort-库函数-排序void qsort(void base, size_t num, size_t width, int(cmp)(const void e1, const void e2) );int型int cmp_int(const void* e1, const void* e2){ return *(int*)e1 - *(int*)e2;}void test1(){ int a[] = { 1,2,3,0,9,8,7,5,4,6

2021-08-11 22:10:23 223

原创 杨氏矩阵(判断某个数字是否存在)

有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的, 请编写程序在这样的矩阵中查找某个数字是否存在。要求:时间复杂度小于O(N);例:1,3,52,4,63,6,9#include<stdio.h>int FindNum(int a[][3], int x, int y, int f){ int i = 0; int j = x - 1; while (j >= 0 && i < y) { if (a[i][j] <

2021-08-11 21:51:03 158

原创 判断字符串

写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。例如:给定s1 = AABCD和s2 = BCDAA,返回1给定s1 = abcd和s2 = ACBD,返回0.AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAAAABCD右旋一个字符得到DAABC这里用到了库函数strcpy,strcat,strstrstrcpy: 将源字符串拷贝到目标空间;strcat: 追加字符串到目标空间字符串后面;strstr: 查找子串·;int findRo

2021-08-10 21:40:38 218

原创 字符串旋转k个字符

字符串左旋实现一个函数,可以左旋字符串中的k个字符例如:ABCD左旋一个字符得到BCDAABCD左旋两个字符得到CDAB设计循环使其可以旋1次,然后让他执行n次是一个最简单的思路:void LeftRotate(char* s, int k){ int i, j, tmp; int len = strlen(s); k %= len; for (i = 0; i < k; i++) //执行k次的单次平移 { tmp = s[0]; for (j = 0; j &l

2021-08-10 21:28:47 211

原创 真実はいつも一つ(真相只有一个)

猜名次5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:A选手说:B第二,我第三;B选手说:我第二,E第四;C选手说:我第一,D第二;D选手说:C最后,我第三;E选手说:我第四,A第一;比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。考虑到一共五个人,直接模拟推理有些太难,计算机最擅长的遍历此时就会派上用场,将每个人从第1到第5来一遍,则一共会产生5^5种可能性,这个只需要一个5层循环即可搞定。但是这样会导致一些不期望出现的结果出现,因为我并没有查重,所以会出现两个人抢名

2021-08-09 21:36:52 1052

原创 杨辉三角+(改进)

杨辉三角11 11 2 11 3 3 1能发现数字规律为:d[i][j] = d[i - 1][j] + d[i - 1][j - 1]所以我们只要按照这个方法填表即可。#include<stdio.h>#include<windows.h>void YangHuiTriangle(int n){ int data[30][30] = { 1 }; //第一行直接填好,播下种子 int i, j; for (i = 1; i < n; i++)

2021-08-09 21:33:12 105

原创 简单扫雷小游戏

前言扫雷想必大家都玩过,实现起来其实并不困难,上图设计代码展示扫雷game.h#pragma once#include<stdio.h>#include<stdlib.h>#include<time.h>#define ROW 9#define COL 9#define ROWS ROW+2#define COLS COL+2#define EASY_COUNT 10//初始化棋盘void InitBoard(char board

2021-07-31 10:38:17 146

原创 简单三子棋(结尾有惊喜>_<)

前言三子棋想来大家都不陌生,就不多说了,直接上图设计思维导图代码主函数三子棋test.c#define _CRT_SECURE_NO_WARNINGS#include"三子棋game.h"void menu(){ printf("*************************\n"); printf("**** 1.play 0.exit ****\n"); printf("*************************\n");}//游戏核心--算法实现

2021-07-28 21:15:40 114 2

空空如也

空空如也

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

TA关注的人

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