C/C++
文章平均质量分 74
ZQ_ZHU
这个作者很懒,什么都没留下…
展开
-
关于堆栈的讲解(我见过的最经典的)
预备知识—程序的内存分配一个由C/C++编译的程序占用的内存分为以下几个部分栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的...转载 2020-03-10 16:29:18 · 256 阅读 · 0 评论 -
C++ 值传递、指针传递、引用传递详解
值传递形参是实参的拷贝,改变形参的值并不会影响外部实参的值。从被调用函数的角度来说,值传递是单向的(实参->形参),参数的值只能传入,不能传出。当函数内部需要修改参数,并且不希望这个改变影响调用者时,采用值传递。指针传递形参为指向实参地址的指针,当对形参的指向操作时,就相当于对实参本身进行的操作引用传递形参相当于是实参的“别名”,对形参的操作其实就是对实参的操作,在引用传递过程中,...转载 2020-03-10 15:18:06 · 179 阅读 · 0 评论 -
C++经典面试题 | malloc和new的区别?
解题思路(1)malloc和new都是在堆上开辟内存的malloc只负责开辟内存,没有初始化功能,需要用户自己初始化;new不但开辟内存,还可以进行初始化,如new int(10);表示在堆上开辟了一个4字节的int整形内存,初始值是10,再如new int[10] ();表示在堆上开辟了一个包含10个整形元素的数组,初始值都为0。(2)malloc是函数,开辟内存需要传入字节数,如mall...转载 2020-03-09 20:28:31 · 359 阅读 · 0 评论 -
【面试总结】神奇的strlen()函数
问题是这样的:char s[] = “\\123456\123456\t”;printf("%d\n",strlen(s));A 12 B 13 C 16 D 以上都不对正确答案:B考察知识点:转义字符的作用,首先是一个转义字符\,再加上123456此时长度为7,然后又是一个转义字符\123表示的是{,长度为8,再加上456长度为11,再加上\t长度为12,最后再加上结束符标志...原创 2019-10-31 16:57:44 · 506 阅读 · 1 评论 -
【面试总结】strcpy函数的一系列bug
今天去面试,碰到了天杀的strcpy,然后面试官让我把其祖宗十八代交代下,傻眼了,接下来就好好总结一哈,防患于未然~~~~内存越界当要拷贝的源字符串大于目标串的长度时,由于无法根据指针判断其所指定的长度,所以数组内存边界是不知道的,会导致潜在的内存越界问题,这个会死人的效率低当目标数组的长度大于源字符串的长度时会在其末尾一直添加结束符\0,一直到数组满为止\0丢失当源字符串的长度刚好...原创 2019-10-31 16:45:52 · 383 阅读 · 0 评论 -
冒泡排序改进:鸡尾酒排序算法
针对已经有序的数组,冒泡排序还要做无用的操作,于是出现了鸡尾酒排序算法,从两边同时进行排序,第一次将最大的放到末尾,第二次将最小的放到起始,一次进行直到整个数组有序:void jwjSort(int a[], int n){ for (int i = 0; i < n / 2; i++) { //将最大的放到末尾 for (int j = i; j < n - 1 - ...原创 2019-10-23 21:26:34 · 157 阅读 · 0 评论 -
【C++】字符串和数值类型的相互转化(借助STL)
转自:https://blog.csdn.net/xiaohui_hubei/article/details/21243671写在文章开头的话读完这篇文章后,你将学到下面的知识:(1)如何利用标准库中的 std::stringstream 来完成字符串和数值类型的相互转换(2)如何利用 C++11 提供的字符串转换函数,将std::string类型转换为数值类型 &nb...转载 2018-08-10 20:08:38 · 621 阅读 · 0 评论 -
c++读取文件内容并统计指定字符的个数
#include #include using namespace std;int main(){ int cnt = 0; FILE *fp=fopen("stdin", "r"); FILE *fout = fopen("stdout", "w"); fseek(fp, 0, SEEK_END); int filesize = ftell(fp); fseek(fp, 0原创 2017-12-03 16:21:42 · 5879 阅读 · 0 评论 -
0x003B8027 处有未经处理的异常(在*.exe 中): 0xC00000FD: Stack overflow (参数: 0x00000000, 0x00252000)
如图,错误信息如下:代码如下所示,找了半天错误还以为自己代码有问题,然而并不是,真是心累。。。#include "myfun.h"#include #include #include const int MAX_N = 1000000;using namespace std;//区间调度问题//s:任务开始时间//e:任务结束时间//N:任务数量int s原创 2017-10-10 22:07:08 · 18700 阅读 · 3 评论 -
C++实现生产者消费者
#include <condition_variable>#include <mutex>#include <thread>#include <iostream>#include <queue>#include <chrono>int main(){ // 生产者数量 std::queue<int> produced_nums; // 互斥锁 std::m原创 2017-09-02 22:44:53 · 873 阅读 · 0 评论 -
C++11 智能指针std::shared_ptr/std::unique_ptr/std::weak_ptr
std::shared_ptrstd::shared_ptr 是一种智能指针,它能够记录多少个 shared_ptr 共同指向一个对象,从而消除显示的调用 delete,当引用计数变为零的时候就会将对象自动删除。原创 2017-09-02 21:56:04 · 1528 阅读 · 0 评论 -
LeetCode 283. Move Zeroes
Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.For example, given nums = [0, 1, 0, 3, 12], after calling you原创 2017-06-29 17:02:12 · 249 阅读 · 0 评论 -
C++ STL 几个容器的底层实现
STL底层数据结构实现C++ STL 的实现:1.vector 底层数据结构为数组 ,支持快速随机访问2.list 底层数据结构为双向链表,支持快速增删3.deque 转载 2018-08-10 20:10:55 · 261 阅读 · 0 评论 -
析构函数何时被调用
为什么要说“也”?用google搜索“析构函数”是,google会说“约有81,500项符合 析构函数 的查询结果”,我最近复习c++是有所心得,所以“也”想谈谈“析构函数”。我不想像教科书似的介绍它,而是从它何时被调用来浅谈一下。析构函数在下边3种情况时被调用:1.对象生命周期结束,被销毁时;2.delete指向对象的指针时,或delete指向对象的基类类型指针...转载 2018-08-10 21:34:09 · 4791 阅读 · 0 评论 -
int类型究竟占几个字节
最近在看深入理解计算机系统这本书,上面提到了在32位机器和64机器中int类型都占用4个字节。后来,查了The C Programming language这本书,里面有一句话是这样的:Each compiler is free to choose appropriate sizes for its own hardware, subject ...转载 2019-03-28 17:16:51 · 7664 阅读 · 1 评论 -
哈夫曼(huffman)树和哈夫曼编码
讨论QQ群:待定哈夫曼树哈夫曼树也叫最优二叉树(哈夫曼树) 问题:什么是哈夫曼树?例:将学生的百分制成绩转换为五分制成绩:≥90 分: A,80~89分: B,70~79分: C,60~69分: D,<60分: E。 if (a < 60){ b = 'E'; } else if (a < 70) { ...转载 2019-06-17 17:08:30 · 498 阅读 · 0 评论 -
error C3861: “sort”: 找不到标识符
RT在vs2013中新建项目,然后新建cpp文件,头文件<algorithm>已经引入,但是使用sort函数时居然报错了解决办法:加入using namespace std;命名空间就好了,简单吧~~~~...原创 2019-08-19 16:36:24 · 4050 阅读 · 3 评论 -
C++经典面试题(最全,面中率最高)
C++经典面试题(最全,面中率最高) 1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对...转载 2019-08-22 18:48:46 · 319 阅读 · 0 评论 -
C 语言运算符优先级(记忆口诀)
优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(表达式)/函数名(形参表) .成员选择(对象)对象.成员名 ->成员选择(指针)对象指针->...转载 2019-10-08 23:21:10 · 355 阅读 · 0 评论 -
远指针FAR/近指针NEAR/_STDCALL/_CDECL
今天看到inet_ntoa函数的原型,这个返回类型实在是没见过:char FAR* PASCAL FAR inet_ntoa(struct in_addr in);搜索了一下:1.关于FAR:(来自http://blog.csdn.NET/sphone89/article/details/7184976)FAR 是16位系统时候的概念了,代表远指针的意思。近指针是1转载 2017-02-16 17:40:12 · 522 阅读 · 0 评论 -
LeetCode 167. Two Sum II - Input array is sorted
Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number.The function twoSum should return indices of the two number原创 2017-06-17 21:57:13 · 266 阅读 · 0 评论 -
LeetCode 1.Two Sum
Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use thesame原创 2017-06-17 21:40:01 · 196 阅读 · 0 评论 -
LeetCode 66.Plus One
Given a non-negative integer represented as a non-empty array of digits, plus one to the integer.You may assume the integer do not contain any leading zero, except the number 0 itself.The digits a原创 2017-06-29 16:03:23 · 217 阅读 · 0 评论 -
WaitForSingleObject的用法
WaitForSingleObject的用法 1.WaitForSingleObject的用法 DWORDWaitForSingleObject( HANDLE hHandle, DWORD dwMill原创 2017-02-16 17:48:18 · 465 阅读 · 0 评论 -
WaitForSingleObject()函数、WaitForMultipleObject()函数
在多线程下面,有时候我们会希望等待某一线程完成了再继续做其他事情,要实现这个目的,可以使用Windows API函数WaitForSingleObject,或者WaitForMultipleObjects。这两个函数都会等待Object被标为有信号(signaled)时才返回的。那么,什么是信号呢?简单来说,Windows下创建的Object都会被赋予一个状态量。如果Object被激活了,转载 2017-02-16 17:46:03 · 400 阅读 · 0 评论 -
C++事件的建立和使用SetEvent,ResetEvent
一、事件是很常用的多线程同步互斥机制 函数原型如下所示,一共四个参数:HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes, // SECURITY_ATTRIBUTES结构指针,可为NULL BOOL bManualReset, // 手动/自动转载 2017-02-16 17:44:30 · 674 阅读 · 0 评论 -
sscanf函数
名称: sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: Int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *format [,argument]... ); 说明: sscanf与scanf类似,都原创 2017-02-16 17:42:50 · 104 阅读 · 0 评论 -
#ifndef方式 && #pragma once方式
为了避免同一个文件被include多次1 #ifndef方式2 #pragma once方式在能够支持这两种方式的编译器上,二者并没有太大的区别,但是两者仍然还是有一些细微的区别。 方式一: #ifndef __SOMEFILE_H__ #define __SOMEFILE_H__ ... ... // 一些声明语句 #原创 2017-02-16 17:38:10 · 635 阅读 · 0 评论 -
C++中for循环的5种语法
C++中for循环的5种语法,你可知道?在最新的C++中,支持for循环的5种用法,你可知道?[cpp] view plain copyprint?#include #include ////////////////////////////////////////////// int nArray[] = {0, 1, 2,转载 2017-01-13 16:19:54 · 27676 阅读 · 5 评论 -
fopen和fopen_s用法的比较
在定义FILE * fp 之后,fopen的用法是: fp = fopen(filename,"w")。而对于fopen_s来说,还得定义另外一个变量errno_t err,然后err = fopen_s(&fp,filename,"w")。返回值的话,对于fopen来说,打开文件成功的话返回文件指针(赋值给fp),打开失败则返回NULL值;对于fopen_s来说,打开文件成功返回0,失败返回转载 2016-12-29 21:43:24 · 1297 阅读 · 0 评论 -
stringstream的用法
【本文来自】http://www.builder.com.cn/2003/0304/83250.shtmlhttp://www.cppblog.com/alantop/archive/2007/07/10/27823.html使用stringstream对象简化类型转换C++标准库中的提供了比ANSI C的更高级的一些功能,即单纯性、类型安全和可扩展性。在本文中,我将展示怎样使用这些库转载 2017-01-04 16:04:59 · 226 阅读 · 0 评论 -
WriteFile和ReadFile函数
读写文件是每个Windows软件开发人员都需要做的工作。可见这项工作是非常重要的,毕竟各种各样的数据都需要保存起来,以便作各种各样的分析,或者通过网络传送给别人。像大家用BT下载的电影,在那个BT软件里,就需要不断从网络里接收到数据,然后再把这些数据保存到文件里合适的位置,就可以生成跟发行者那里一样的文件,这样才可以播放出来。又比如我在玩《征途》的游戏里,刚刚打开游戏时,它就不断从服务器上下载更新转载 2017-02-16 17:53:56 · 3545 阅读 · 0 评论 -
CreateEvent/SetEvent/ResetEvent和WaitForSingleObject
1.CreateEvent 是创建windows事件的意思,作用主要用在判断线程退出,程锁定方面. 函功能描述:创建或打开一个命名的或无名的事件对象。 HANDLE m_hExit; m_hExit= CreateEvent( NULL, TRUE, FALSE, NULL ); EVENT有两种状态:发信号,不发信号。2.SetEvent/ResetE转载 2017-02-16 20:41:11 · 526 阅读 · 0 评论 -
CreateThread函数用法
该函数在主线程的基础上创建一个新线程。微软在Windows API中提供了建立新的线程的函数CreateThread。CreateThread步骤CreateThread将在主线程的基础上创建一个新线程,大致做如下步骤:1.在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回2.把线程退出码置为STILL_ACTIVE,把线程挂起计数置1原创 2017-02-16 21:59:19 · 5475 阅读 · 0 评论 -
C语言数组与指针详解
++++++++++++++++++++++++++++++++++++++++++本文系本站原创,欢迎转载! 转载请注明出处:http://blog.csdn.net/mr_raptor/article/details/6844691++++++++++++++++++++++++++++++++++++++++++ 好多同学都说:“老师,我看到指针就晕!”转载 2017-05-29 22:29:21 · 346 阅读 · 0 评论 -
C#编程实现获取当前计算机的名字
利用windows系统自带的kernel32.dll文件,然后将其引入到自己的项目中来,就可以轻松实现获取计算机全名了,好了直接上代码using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Ru原创 2017-04-28 19:36:59 · 2491 阅读 · 0 评论 -
CreateFile, ReadFile详解
一、*****CreateFile***** 这个函数可以创建或打开一个对象的句柄,凭借此句柄就可以控制这些对象:控制台对象、通信资源对象、目录对象(只能打开)、磁盘设备对象、文件对象、邮槽对象、管道对象。 函数原型:HANDLE CreateFile(LPCTSTRlpFileName, // file name对象路转载 2017-02-21 22:39:24 · 884 阅读 · 0 评论 -
ZeroMemory、memset 和 “={0}” 三者用于清零操作的区别
ZeroMemory、memset 和 “={0}” 三者用于清零操作的区别:首先是ZeroMemory和memset的区别:1、ZeroMemory是微软的SDK提供的,memset属于C Run-time Library提供的。因此ZeroMemory只能用于Windows系统,而memset还可用于其他系统。2、ZeroMemory是一个宏,只是用于把一段内存转载 2017-02-21 12:04:31 · 1923 阅读 · 0 评论 -
C++计算程序运行时间
C++中的计时函数是clock(),而与其相关的数据类型是clock_t(头文件是time.h)。函数定义原型为:clock_t clock(void);这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。另外在time.h文件中,还定义了一个常量CLOCKS_PER_S原创 2017-01-21 21:51:26 · 444 阅读 · 0 评论 -
数组指针和指针数组的区别
数组指针和指针数组的区别数组指针(也称行指针)定义 int (*p)[n];()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。如要将二维数组赋给一指针,应这样赋值:int a[3][4];int (*p)[4]; //该语句是定义一个数组指针,指向含4个元转载 2017-01-20 14:26:12 · 214 阅读 · 0 评论