![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++
yrc_Note
一个努力从测试转开发的小老弟
展开
-
如何学习C语言
因本人学习C语言的感想,为初学者提供一些参考,让初学者少走弯路 我想C语言基本上是每个人进入计算机,进入编程所学的第一门语言,其深刻意义不言而喻。废话不多讲一、C语言是什么要学习一样东西,我们首先需要搞清楚他是什么,干什么用,否则我们只是一个学习的工具而已,如此何必又要去学习呢,浪费精力而已http://baike.1688.com/doc/view-d2345461.h原创 2016-03-26 22:34:09 · 1193 阅读 · 6 评论 -
MFC中L, _T(),TEXT,_TEXT区别以及含义
字符串前面加L表示该字符串是Unicode字符串。_T是一个宏,如果项目使用了Unicode字符集(定义了UNICODE宏),则自动在字符串前面加上L,否则字符串不变。因此,Visual C++里边定义字符串的时候,用_T来保证兼容性。VC支持ascii和unicode两种字符类型,用_T可以保证从ascii编码类型转换到unicode编码类型的时候,程序不需要修改。以下是别人的总结:转载 2017-08-23 21:26:01 · 1590 阅读 · 0 评论 -
函数调用时堆栈中的EIP EBP ESP寄存器
EIP,EBP,ESP都是系统的寄存器,里面存的都是些地址。 为什么要说这三个指针,是因为我们系统中栈的实现上离不开他们三个。其实它还有以下两个作用: 1.栈是用来存储临时变量,函数传递的中间结果。 2.操作系统维护的,对于程序员是透明的。 我们可能只强调了它的后进先出的特点,至于栈实现的原理,没怎么讲?下面我们就通过一个小例子说说栈的原理。 先写个小程序:void fun(void转载 2017-09-06 10:52:51 · 1458 阅读 · 0 评论 -
c/c++程序编译连接过程
转载http://www.cnblogs.com/hongfenglee/archive/2012/02/18/2356808.html详解link转载 2017-08-24 10:58:40 · 264 阅读 · 0 评论 -
socket编程---send函数&recv函数详解
一、send函数函数原型:int send( SOCKET s,char *buf,int len,int flags );功能:不论是客户还是服务器应用程序都用send函数来向TCP连接的另一端发送数据。客户程序一般用send函数向服务器发送请求,而服务器则通常用send函数来向客户程序发送应答。参数一:已建立了连接、将用于发送数据的套接字参数二:存放应用程序要发转载 2017-09-07 15:34:02 · 441 阅读 · 0 评论 -
实战c++中的string系列--string与整型或浮点型互转
教科书中很少会提到string与int或是float的相互转换,但是在实际工程中会经常遇到,尤其在做UI控件显示的时候。比如说你要在edit控件中显示一个数值,那你就需要把这个数值首先转为string,然后再将这个string付给edit控件。网上你会找到很多的转换方法,个人觉得效率差不多的情况下,简洁最好。这里主要用到的是stringstreams:stringstrea转载 2017-09-07 20:31:24 · 730 阅读 · 0 评论 -
warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead.
使用VS2005以上版本(VS2005、VS2008、VS2010)编译在其他编译器下正常通过的C语言程序,你可能会遇到类似如下的警告提示: 引用内容warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation转载 2017-09-08 16:48:39 · 577 阅读 · 0 评论 -
#pragma comment(lib,"ws2_32.lib")
pragma comment(lib,”Ws2_32.lib”)表示链接Ws2_32.lib这个库。 和在工程设置里写上链入Ws2_32.lib的效果一样,不过这种方法写的程序别人在使用你的代码的时候就不用再设置工程settings了。 手工设置的步骤如下 快捷键“Alt+F7”进入工程设置之后,LINK—–OBJECT/LIBRARY MODULES里面设置有一样的效果:ws2_32.li转载 2017-09-08 17:28:26 · 6182 阅读 · 0 评论 -
为何需要虚析构函数
//首先,我们定义了A类class A{public: ~A() { cout << "~A()" << endl; }private: char * a;};//然后定义B类,B类继承自A类class B : public A{public: ~B() { cout << "~B()" << endl;原创 2017-09-09 17:10:20 · 548 阅读 · 0 评论 -
使用循环的方式遍历二叉树
一、基本概念每个结点最多有两棵子树,左子树和右子树,次序不可以颠倒。 性质: 1、非空二叉树的第n层上至多有2^(n-1)个元素。 2、深度为h的二叉树至多有2^h-1个结点。 满二叉树:所有终端都在同一层次,且非终端结点的度数为2。 在满二叉树中若其深度为h,则其所包含的结点数必为2^h-1。 完全二叉树:除了最大的层次即成为一颗满二叉树且层次最大那层所有的结点均向左靠齐,即集中在左面原创 2017-09-26 15:12:18 · 3076 阅读 · 1 评论 -
查找——相邻元素差的绝对值都是1的数组当中的某个数的索引——多益网络2018校招编程1
http://blog.csdn.net/u010159842/article/details/46137459题目是这样的: 有这样一个数组A,大小为n,相邻元素差的绝对值都是1,如A={4,5,6,5,6,7,8,9,10,9}。现在给定数组A和目标整数t,请找到t在数组中的位置。首先,总结一下,发现自己真实笨得出奇,看到这个题竟然没思路,然后在网上查了一下资料,一看解答,阿西吧,简单的不行。原创 2017-09-18 20:01:13 · 812 阅读 · 0 评论 -
内存对齐
/****************程序员专用分割线****************/写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?我之前一直是懵逼的,自从看了这篇博客http://blog.csdn.net/hairetz/article/details/4084088,所以我自己来做个总结,做个笔记。/****原创 2017-09-18 21:40:42 · 433 阅读 · 0 评论 -
剑指offer——赋值运算符函数
#include<iostream>using namespace std;class String{public: String(char * pData = NULL); String(const String& str); ~String(); String& operator=(const String& str); void print();原创 2017-09-08 17:29:59 · 346 阅读 · 0 评论 -
纯虚函数与抽象基类
纯虚函数:C++中可以定义这样一类函数,这样的函数可以没有实现。我们把这样的函数称为纯虚函数。纯虚函数有什么意义 通过它可以指明一个虚拟函数只是提供了一个可被子类型改写的接口。 纯虚函数是在基类中声明的虚函数,它可以在基类中有定义,而且派生类必须定义自己的实现方法。基类不能生成对象,可以使用指针或者引用派生类对象。基类不在基类中实现纯虚函数的方法是在函数原型后加“=0” virtu原创 2017-09-11 15:14:17 · 307 阅读 · 0 评论 -
单例模式
设计模式之单例模式有什么好处? C++Singleton模式主要作用是保证在C++应用程序中,一个类Class只有一个实例存在。 使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于资源管理及节约内存资源。 我们在浏览BBS、SNS网站的时候,常常会看到“当前在线人数”这样的一项内容。对于这样的一项功能,我们通常的做法是把当前的在线人数存放到一个转载 2017-09-11 16:58:07 · 283 阅读 · 0 评论 -
MFC中的AfxEnableControlContainer()的作用
要想在应用程序中使用ActiveX控件,必须使你的应用程序成为ActiveX控件包容器。ActiveX 控件包容器就是完全支持ActiveX控件,并能把控件组合进自己的窗口或对话框的父应用程序。利用MFC的AppWizard,你可以很方便地创建你的包容器程序。事实上,在用AppWizard创建新的应用程序时,你的应用程序就被缺省设置为控件包容器,即在第3步选中支持ActiveX Con原创 2017-08-23 18:36:54 · 1891 阅读 · 0 评论 -
C++函数后面的throw()
看智能指针auto_ptr实现的时候发现了这么个东东 explicit auto_ptr(_Ty *_Ptr = 0) _THROW0() : _Myptr(_Ptr) { // construct from object pointer }宏_THROW0():#define _THROW0() throw () 函数后面原创 2017-08-23 17:33:55 · 1230 阅读 · 0 评论 -
时间复杂度与空间复杂度
算法的时间复杂度和空间复杂度合称为算法的复杂度。1、时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度转载 2017-07-13 09:54:18 · 367 阅读 · 0 评论 -
C++嵌套类与内部类
————————————————–先从定义上来区分————————————————– 嵌套类 所谓嵌套类就是可以在一个类中定义另一个类。这个被嵌套的类的作用域就只在它的上一级类中。 外围类需要使用嵌套类对象作为底层实现,并且该嵌套类值用于外围类的实现,且同时可以对用户隐藏该底层实现 从作用域的角度看,嵌套类别隐藏在外围类之中,该类名只能在外围类中使用。如果原创 2017-08-10 08:53:26 · 5260 阅读 · 1 评论 -
C++类成员在内存中的存储及对齐方式
一、空类的大小 C++中空类的大小是1,这是因为空类也可以被实例化,为了确保每一个实例在内存中都有一个独一无二的地址,编译器往往隐含给一个空类加一个字节。二、类中的成员函数与非虚成员函数 类中的非虚成员函数不占用空间,虚函数表占用四个字节,只要有虚函数(无论有几个)都只占用四个字节。成员函数还是以一般的函数一样的存在。a.fun()是通过fun(a.this)来调用的。所谓成员函数只是在名义上是转载 2017-08-18 18:01:16 · 623 阅读 · 0 评论 -
C/C++中volatile关键字详解
为什么用volatile?C/C++ 中的 volatile 关键字和 const 对应,用来修饰变量,通常用于建立语言级别的 memory barrier。这是 BS 在 “The C++ Programming Language” 对 volatile 修饰词的说明:A volatile specifier is a hint to a compiler that an object may转载 2017-08-18 23:54:14 · 210 阅读 · 0 评论 -
C++中头文件有什么作用?
一、C++编译模式 通常,在一个C++程序中,只包含两类文件——.cpp文件和.h文件。其中,.cpp文件被称作C++源文件,里面放的都是C++的源代码;而.h文件则被称作C++头文件,里面放的也是C++的源代码。C+ +语言支持“分别编译”(separate compilation)。也就是说,一个程序所有的内容,可以分成不同的部分分别放在不同的.cpp文件里。.cpp文件里的东西都是相对独立的转载 2017-08-19 12:14:52 · 4728 阅读 · 0 评论 -
C++中 DWORD和int的区别
C++中 DWORD和int的区别INT 代表int,DWORD 代表 unsigned longint会随着机器位数的不同而发生变化,比如在16位机上为16为,在32位机上为32位,在64位机上为64位。看看最原始的定义就知道了。 DWORD是无符号的,相当于unsigned long ,它是MFC的数据类型。而int是有符号性的,而且他所占的原创 2017-08-19 17:01:08 · 1966 阅读 · 0 评论 -
[MFC]DECLARE_MESSAGE_MAP() 的理解
[MFC]DECLARE_MESSAGE_MAP() 的理解只要当前类是CCmdTarget派生的,则必须提供消息映射以处理消息。 具体方式是在类或者结构体末尾添加DECLARE_MESSAGE_MAP(无分号),然后在定义类成员函数的.CPP文件中,使用BEGIN_MESSAGE_MAP()宏和 END_MESSAGE_MAP()宏来实现对消息的处理。转载 2017-08-24 17:06:24 · 1406 阅读 · 0 评论 -
GetPrivateProfileInt使用说明
GetPrivateProfileInt =>从ini配置文件取得目标数值 <参数> lpApplicationName String,指定在其中查找条目的小节。注意这个字串是不区分大小写的 lpKeyName String,欲获取的设置项或条目。这个支持不区分大小写 nDefault Long,指定条目未找到时返回的默认值 lpFileName String,初原创 2017-08-24 18:15:00 · 6120 阅读 · 0 评论 -
#define宏替换
在程序中扩展#define定义符号和宏时,需要涉及几个步骤。 &npsp;&npsp;1、在调用宏时,首先对参数进行检查,看看是否包含了任何由#define定义的符号。如果是,它们首先被替换。 &npsp;&npsp;2、替换文本随后被插入到程序原来本本的位置。对于宏,参数名被它们的值所代替。 &npsp;&npsp;3、再次对结果文本进行扫描,看看它是否包含了任何由#define定义的符号。原创 2017-08-24 21:52:51 · 2475 阅读 · 0 评论 -
C语言之memcpy与strcpy
memcpy函数原型void *memcpy( void *dest, const void *src, size_t count );功能:在缓冲区之间复制字节,从src指向地址为起始地址的连续count个字节的内容复制到以dest为首地址的连续区域。参数: dest:新缓冲区。 src:从中进行复制操作的缓冲区。 coun原创 2017-08-25 16:38:56 · 854 阅读 · 0 评论 -
如何打乱一个给定数组?
在程序开发过程中,有时候需要打乱一组给定的序列,而且每次请求打乱的结果还要求不一样,比如在棋牌等游戏中有这样的需求。 首先,我们定义一个待打乱的数组: int array[10] = {1,2,3,4,5,6,7,8,9,10}; 再定义一个用于存放打乱后数据存放的数组 int DistrubAry[10] = { 0 }; //晚上再更新原创 2017-08-26 15:37:48 · 847 阅读 · 0 评论 -
剑指offer——二维数组的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样一个二维数组和一个整数,判断数组中是否含有该函数。思路:我们根据已经排好序这个出发点出发。首先待查元素x与二维数组b最右上角比较,如果x<b那么这一列都肯定比待查元素x大,所以可以删除这一列,缩小我们的查找范围。如果x>b,那么x肯定比这一行的所有元素都大,所以删除这一行,最后,如原创 2017-09-13 09:14:02 · 307 阅读 · 0 评论 -
剑指offer——替换空格&合并数组
题目:请实现一个函数,把字符串中的每个空格替换成”20%”。例如输入”We are happy.”,则输出”We%20are%20happy.”。思路,从后往前替换,防止一个字符移动多次。减少时间复杂度算法实现#include<iostream>using namespace std;void func1(char * desc, char * src){ int i = 0;原创 2017-09-13 09:24:13 · 398 阅读 · 0 评论 -
剑指offer——从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印出每个节点的值。说实话,我最开始的思路是,定义一个辅助数组,将这个链表的值依次存入到数组中去,压根就没打算用栈这个数据结构的。我感觉两个效率差不多吧。有想法的通知麻烦指出来。算法实现#include <iostream>#include<stack>using namespace std;struct Node{ int val;原创 2017-09-13 09:33:19 · 257 阅读 · 0 评论 -
剑指offer——数组名与指针的区别
在C/C++中,数组与指针相互关联又有区别的两个概念。当我们声明一个数组时,其数组名字也是一个指针,该指针指向数组的第一个元素。我们可以用一个指针来访问数组。但需要注意的是,C/C++没有记录了数组的大小(指的是C/C++中的指针变量没有记录数组的大小),因此用指针来访问数组的元素时,我们要确保没有超出数组的边界。咋们举个栗子#include <iostream>using namespace s原创 2017-09-11 20:24:31 · 368 阅读 · 0 评论