
C语言
文章平均质量分 56
一纸一清风
滋滋有味的学习 津津有味的生活
展开
-
C++内存空间分布
如上所示即为典型C内存空间分布图,从高地址向低地址进行说明:1.stack,即栈区,存放自动变量,以及函数调用时保存的信息。每当进行函数调用时,函数的实参和返回地址以及调用者的上下文环境会被存放在栈中;栈区由编译器自动分配,从高地址向低地址扩展,为什么会这样?我也不知道2.heap,即堆区,动态内存分配都是发生在堆区,堆区由程序员分配释放,或程序结束后由操作系统自动回收,从低地址向高地址扩...原创 2019-10-24 15:53:38 · 486 阅读 · 0 评论 -
说一说static关键字的作用
1. 全局静态变量在全局变量前加上关键字static,全局变量就定义成一个全局静态变量.静态存储区,在整个程序运行期间一直存在。初始化:未经初始化的全局静态变量会被自动初始化为0(自动对象的值是任意的,除非他被显式初始化);作用域:全局静态变量在声明他的文件之外是不可见的,准确地说是从定义之处开始,到文件结尾。2. 局部静态变量在局部变量之前加上关键字static,局部变...原创 2019-08-14 19:57:25 · 187 阅读 · 0 评论 -
C++中 ' ' 和 “ ” 的区别
"a"和'a'的区别,前者是字符串,后者是字符。实际上,"a"在内存中一般占2个字节(不是说字符串长度,是占用内存。注意说是一般占2字节,有特殊情况),"a\0",以'\0'结尾。而'a'是一个单字符。当然字符串可以是"abcde"这样的,'abcde'这样就是错误的。单引号里的内容表示是字符,双引号里的内容表示是字符串,每个字符串都有一个'\0'结束符。在C++中sizeof('a...原创 2019-08-13 16:38:29 · 2735 阅读 · 0 评论 -
归并排序
归并排序是一种比较高效的排序它的基本思想可以概括为先查分,再合并所谓拆分就是可以利用递归的思想,将数列分为一个一个的小数列,拆分过程有种像树的感觉,当分出来的数据只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的两个小组就可以了。这样先通过递归的分解数列,再合并数列就完成了归并排序下面给出具体实现//归并排序//稳定性 稳定//时间复杂度 O(n*logN)...原创 2019-08-13 10:30:28 · 141 阅读 · 0 评论 -
快速排序
基本思想1.先从数列中取出一个数作为基数2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边3.再对左右区间重复第二步,直到各区间只有一个数这就是挖坑填数的基本思路下面我写一下实现步骤总结1. i = L, j = R,将基准数挖出后形成第一个坑a[i]2. j--由后向前找比它小的数,找到后挖出此数填到前一个坑a[i]中3. i++由前向...原创 2019-08-13 10:11:17 · 131 阅读 · 0 评论 -
IO流
我们在和文件进行交互中,有着缓冲区的存在,在C语言中,有着输入缓冲区和输出缓冲区两种1.可以屏蔽掉低级I/O的实现,低级I/O的实现依赖操作系统本身内核的实现,所以如果能够屏蔽这部分的差 异,可以很容易写出可移植的程序。 2.可以使用这部分的内容实现“行”读取的行为,对于计算机而言是没有“行”这个概念,有了这部分,就可以 定义“行”的概念,然后解析缓冲区的内容,返回一个“行”。...原创 2019-08-10 11:08:12 · 130 阅读 · 0 评论 -
Huffman树实现文件的压缩与解压缩
Huffman树的概念Huffman树是由n个带权叶子节点构成的所有二叉树中带权路径长度最短的二叉树。节点的带权路径长度树根到某一节点的路径长度与该节点的权的乘积。树的带权路径长度树的带权路径长度为树中从根节点到所有叶子节点的各个带权路径长度之和。Huffman树的构造步骤:初始化:将给定的节点都看作根节点,构成森林。找最小树:在森林中选出两棵根节点的权值最小的二叉树...原创 2019-08-09 21:19:11 · 332 阅读 · 0 评论 -
顺序表和链表的总结
尾插和尾删 顺序表:O(1) 不带头节点的单链表:遍历链表,删除O(N)如果将最后一个节点保存:O(1)任意位置的插入与删除顺序表O(N),因为涉及到数据的迁移链表O(1)顺序表支持随机访问,访问任意位置节点O(1)链表需要遍历O(N)底层的空间不同顺序表底层是一段连续的空间链表底层是不连续的...原创 2019-08-07 19:01:35 · 307 阅读 · 0 评论 -
牛客网答题输入技巧
输入预先不输入数据的组数while(cin>>a>>b){cout<<a+b<<endl;}预先知道数据组数cin>>n;for(int i=0; i<n; i++){int a,b;cin>>a>>b;cout<<a+b<<endl;...原创 2019-08-06 20:46:16 · 1192 阅读 · 0 评论 -
C++ operator=的两种写法
class CMyString{public: CMyString(char* pData = nullptr); CMyString(const CMyString &str); ~CMyString(void); CMyString& operator=(const CMyString &str) { if (this != &str)...原创 2019-07-29 19:55:10 · 4004 阅读 · 0 评论 -
C/C++内存分布
1. 栈又叫堆栈,非静态局部变量/函数参数/返回值等等,栈是向下增长的。2. 内存映射段是高效的I/O映射方式,用于装载一个共享的动态内存库。用户可使用系统接口创建共享共享内存,做进程间通信。3. 堆用于程序运行时动态内存分配,堆是可以上增长的。4. 数据段--存储全局数据和静态数据。5. 代码段--可执行的代码/只读常量。假设我们是32位操作系统,上面就是我们的用户...原创 2019-07-25 16:41:38 · 130 阅读 · 0 评论 -
C++中static的用法详解
C 语言的 static 关键字有三种(具体来说是两种)用途:静态局部变量:用于函数体内部修饰变量,这种变量的生存期长于该函数。int foo(){ static int i = 1; // note:1 //int i = 1; // note:2 i += 1; return i;}要明白这个用法,我们首先要了解c/c++的内存分布,以及static所在的区间。对...转载 2019-07-25 15:32:19 · 159 阅读 · 0 评论 -
this指针
1.this指针存在哪里?其实编译器在生成程序时加入了获取对象首地址的相关代码。并把获取的首地址存放在了寄存器ECX中(VC++编译器是放在ECX中,其它编译器有可能不同)。也就是成员函数的其它参数正常都是存放在栈中。而this指针参数则是存放在寄存器中。类的静态成员函数因为没有this指针这个参数,所以类的静态成员函数也就无法调用类的非静态成员变量。2.this指针可以为空吗?可...原创 2019-05-29 23:23:58 · 327 阅读 · 0 评论 -
C语言实现 ‘学生成绩管理系统’
#include<stdio.h>#include<stdlib.h>#include<string.h>struct Student{ char num[20]; //学号 char name[20]; //姓名 char sex[...原创 2019-05-24 18:22:39 · 752 阅读 · 0 评论 -
用顺序表实现栈
栈是一种有约束的顺式结构,他需要遵循先进后出,后进先出的基本规则,我们可以用顺序表和链表两种方式来实现因为简单就意味着不容易出错,所以在这里我使用顺序表来实现栈Stack.h#pragma once#include<Windows.h>#include<assert.h>//对于栈我们可以用顺序表和链表来实现,栈的代码并不难,在此处,为了省事,直接用顺序表来...原创 2018-10-27 11:14:27 · 793 阅读 · 0 评论 -
基于链表(单链表,含头节点)的基本操作
下面是我对于链表的学习,依然是老生常谈的增删查改LinkList.h //头文件#include<stdio.h>#include<stdlib.h>#include<assert.h>typedef int DataType;typedef struct LinkList{ DataType data; struct LinkList * ...原创 2018-10-20 11:05:20 · 275 阅读 · 0 评论 -
基于顺序表的创建以及基本操作
标题基于顺序表的创建以及基本操作对于整个顺序表的基本操作我能想到的就这么多,如果以后学到其他的再加进去#pragma once#include<stdio.h>#include<assert.h>#include <stdlib.h>#include<malloc.h>#define ADD_SIZE 3typedef int ...原创 2018-10-14 17:31:53 · 439 阅读 · 0 评论 -
对指针数组,数组指针,函数指针,函数指针数组 ,指向函数指针数组的指针的理解
前言首先我们对于数组名有个理解:1. 数组名单独放在 sizeof () 内部,数组名表示整个数组,计算的是整个数组的大小,单位是字节;2. & 数组名,数组名表示的是整个数组,取出的是数组的地址;3. 除此之外,所有遇到的数组名都表示数组首元素的地址.其次我们要知晓指针和数组的区别:1. 数组和指针访问元素的过程不一样。由于数组的名字就是数组第一个元素的地址,而指...原创 2018-09-05 10:20:42 · 269 阅读 · 0 评论 -
不调用库函数,模拟实现几个标准库函数
模拟实现strcpy原型声明:char *strcpy(char* dest, const char *src);头文件:#include <string.h> 和 #include <stdio.h>功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容...原创 2018-08-28 17:32:07 · 798 阅读 · 0 评论 -
C语言操作符的总结
操作符分为以下几类:(1)算术操作符:+ - * / %(取模) (2)移位操作符:<< 和 >> (3)位操作符:& | ^ (4)赋值操作符:= (5)单目操作符:! - + & – ++ ~ * (类型) sizeof (6)关系操作符::> < == >= <= != (7)逻辑操作符:&& || (8)条件操...原创 2018-06-17 19:04:04 · 279 阅读 · 0 评论 -
用C语言在屏幕上输出一个菱形
解题思路为了在屏幕上输出一个如下图的图形我们首先对图形进行观察,不难发现该图形为高度对称图形,从上至下“ * ”的符号每一行均多两个,然后到中间段,后面每一行便逐行减少两个“ * ”。这便是其中的规律代码如下#include<stdio.h> #include<windows.h> int main(){ int i = 0;//此处的i在程序中表示为菱形的行...原创 2018-06-08 10:33:31 · 3356 阅读 · 0 评论 -
交换两个整形变量的两种方法和用冒泡排序思路求出10个整数中的最大值
1.给定两个整形变量,并将两个值进行交换 解题思路一般我们我们面对这种问题,我们都是先创建一个临时变量,然后借用临时变量以达到我们的目标。#include<stdio.h>#include<stdlib.h> int main(){ int a = 0; int b = 0; int c = 0; scanf_s("%d %d", &...原创 2018-06-04 16:43:24 · 394 阅读 · 0 评论 -
求素数
关于求素数 1.问题描述 质数又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。然后我们可以选择一个输入范围,例如输入start=100和end=200,然后求出之间所有的素数。 2.解题思路 首先呢我们求素数,肯定要用的 for 这个关键字,对这个程序而言,肯定需要用的双层循环来...原创 2018-06-01 23:21:45 · 919 阅读 · 0 评论