![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【C++基础】
CPP攻城师
You got a dream, you gotta protect it. People cant do something themselves,they wanna tell you you cant do it.If you want something, go get it.
展开
-
C++ 指针 (数组和指针)
int a = 0; int *p = &a; cout<<"a = " << a << " p = " << p << " *p = " << *p <<endl; //输出值,地址,值 cout<<"sizeof(a) = "<<sizeof(a)<<endl; // 4 bytes cout<<"sizeof(p) = "<<sizeof(p)<<endl; //4 bytes原创 2013-01-02 23:11:59 · 1120 阅读 · 0 评论 -
C语言深度解剖读书笔记(3.预编译处理)
本节知识点:1.编译过程的简介: 预编译:a.处理所有的注释,以空格代替。b.将所以#define删除,并展开所有的宏定义,字符串替换。c.处理条件编译指令#if,#ifdef,#elif,#else,#endifd.处理#include,并展开被包含的文件,把头文件中的声明,全部拷贝到文件中。e.保留编译器需要使用的#pragm转载 2013-09-03 13:22:43 · 1074 阅读 · 0 评论 -
C语言深度解剖读书笔记(1.关键字的秘密)
开始本节学习笔记之前,先说几句题外话。其实对于C语言深度解剖这本书来说,看完了有一段时间了,一直没有时间来写这篇博客。正巧还刚刚看完了国嵌唐老师的C语言视频,觉得两者是异曲同工,所以就把两者一起记录下来。等更新完这七章的学习笔记,再打算粗略的看看剩下的一些C语言的书籍。本节知识:1.c语言中一共有32个关键字,分别是:auto、int、double、long、char、short、转载 2013-09-03 13:19:13 · 1265 阅读 · 0 评论 -
C语言深度解剖读书笔记(2.字符的技巧)
本节接触了,C语言中的三大蛋疼:符号优先级 ++i顺序点 贪心法 (其实这里面好多都是跟编译器有关的,而且有好多问题都是可以通过良好的编程习惯避免的)本节知识点:1.注释问题: 注释不能把关键字弄断,如:in/*注释*/t 注释不是简单的剔除,而是使用空格替换 编译器认为双引号括起来的内容都是字符串,双斜杠也不例外。如:char *p转载 2013-09-03 13:21:06 · 986 阅读 · 0 评论 -
C++中回调函数(CallBack)的使用
如果试图直接使用C++的成员函数作为回调函数将发生错误,甚至编译就不能通过。其错误是普通的C++成员函数都隐含了一个传递函数作为参数,亦即“this”指针,C++通过传递this指针给其成员函数从而实现程序函数可以访问C++的数据成员。这也可以理解为什么C++类的多个实例可以共享成员函数却-有不同的数据成员。由于this指针的作用,使得将一个CALL-BACK型的成员函数作为回调函数安装时就会转载 2013-09-17 12:58:47 · 9717 阅读 · 1 评论 -
c++中map的基本用法和嵌套用法
C++中map容器提供一个键值对容器,map与multimap差别仅仅在于multiple允许一个键对应多个值。本文主要总结一下map基本用法和嵌套用法示例。一、map基本用法 1 头文件 #include 2 定义 map my_Map; //注意这里的int和int可以是其他类型 或者是typedef map转载 2013-10-17 17:33:32 · 13825 阅读 · 0 评论 -
swprintf() — Format and Write Wide Characters to Buffer
swprintf() — Format and Write Wide Characters to BufferFormat#include int swprintf(wchar_t *wcsbuffer, size_t n, const wchar_t *format, argument-list);Language Level: ANSI转载 2013-10-19 15:11:08 · 1243 阅读 · 0 评论 -
【C++基础】sprintf使用的方法与printf的区别
首先我们在MSDN看一下printf的原型和sprintf的原型int printf( const char *format [, argument]... );和int sprintf( char *buffer, const char *format [, argument] ... );从定义来看两者的功能其实很相似的。如果你接触的控制台的程序较多的话,见到p转载 2013-11-16 11:12:58 · 1510 阅读 · 0 评论 -
【C++基础】将时间转换成字符串
【C++基础】将时间转换成字符串 将time_t转换成std::string类型。 前段时间遇到了这样的需要,现在把当时的解决办法贴出来,如果你有更好的办法,请留言。 思路:先将time_t转换成tm类型,然后将tm类型转换成std::string。同时,如果需要的做时区修正的话,也比较方便。 伪代码代码如下: time_t tt = ?;tm原创 2013-11-18 13:35:51 · 2738 阅读 · 0 评论 -
编程面试的10大算法概念汇总
编程面试的10大算法概念汇总本文由 伯乐在线 - 敏敏 翻译自 programcreek.com。欢迎加入技术翻译小组。转载请参见文章末尾处的要求。以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念。由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍。本文将从Java的角度看问题,包含下面的这些概念:1. 字符串2. 链表转载 2013-11-29 12:23:30 · 1188 阅读 · 0 评论 -
【C++基础】类型转换运算符的使用方法(reinterpret_cast、 const_cast、static_cast、dynamic_cast)
C++的四个类型转换运算符已经有很久了,但一直没有弄清楚它们的用法,今天看到一本书上的解释,才大致地的了解了其具体的用法.具体归纳如下:reinterpret_cast该函数将一个类型的指针转换为另一个类型的指针.这种转换不用修改指针变量值存放格式(不改变指针变量值),只需在编译时重新解释指针的类型就可做到.reinterpret_cast 可以将指针值转换为一个整型数转载 2013-12-09 10:16:56 · 1661 阅读 · 0 评论 -
【C++基础】C++之类的前置声明
c++ 之类的前置声明注:本文转自http://software.intel.com/zh-cn/blogs/2010/05/04/c-2刚开始学习c++的人都会遇到这样的问题:定义一个类 class A,这个类里面使用了类B的对象b,然后定义了一个类B,里面也包含了一个类A的对象a,就成了这样:一编译,就出现了一个互包含的问题了,这时就有人跳出来说转载 2013-12-02 17:21:32 · 1107 阅读 · 0 评论 -
【C++基础】利用stringstream进行数据类型转换
在C++标准库里面,使用stringstream 可以用于各种数据类型之间的转换例如string 转 intstd::string strId = "1";int id = 0;std::stringstream ss;ss << strId.c_str();ss >> id;原创 2014-04-24 19:40:30 · 1296 阅读 · 0 评论 -
C++: Accessing the virtual table directly(盗版)
This post is not intended for beginners. To understand the content of this topic, you need to have basic understanding of what virtual functions are.We know that the run time binding or virtual原创 2013-08-27 23:53:55 · 1117 阅读 · 0 评论 -
回调函数的分析及应用
1 什么是回调软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用;回调是一种双向调用模式,也就是说,被调用方在接口被调用时也会调用对方的接口;异步调用是一种类似消息或事件的机制,不过它的调用方向刚好相反,接口的服务在收到某种讯息或发生某种事件时,会主动通知客户方(即调用客户原创 2013-08-27 23:34:52 · 1684 阅读 · 0 评论 -
字符串截取函数 substr
函数原型basic_string substr( size_type _Off = 0, size_type _Count = npos) const;参数_Off将元素的索引在字符串的副本的位置,使用默认值0。_Count要复制的字符数,如果存在)。返回值是字符串操作数开头元素的副本在该位置的子字符串对原创 2013-05-21 13:43:23 · 4000 阅读 · 0 评论 -
swprintf_s 实现字符串的拼接
函数原型 template int swprintf_s( wchar_t (&buffer)[size], const wchar_t *format [, argument]...); // C++ only这个函数只有C++中才有,C++中字符串遇到 int, double等时不能像Java那样自动实现类型的转换 ,所以需要程序员做些事情来代替原创 2013-05-09 15:46:55 · 14096 阅读 · 0 评论 -
strcat 拼接两个字符串
strcat is short for string catenate.// crt_strcpy.c// compile with: /W1// This program uses strcpy// and strcat to build a phrase.#include #include int main( void ){ char string[80原创 2013-05-09 17:20:58 · 2105 阅读 · 0 评论 -
C,C++中使用可变参数
可变参数即表示参数个数可以变化,可多可少,也表示参数的类型也可以变化,可以是int,double还可以是char*,类,结构体等等。可变参数是实现printf(),sprintf()等函数的关键之处,也可以用可变参数来对任意数量的数据进行求和,求平均值带来方便(不然就用数组或每种写个重载)。在C#中有专门的关键字parame,但在C,C++并没有类似的语法,不过幸好提供这方面的处理函数,本文将重点转载 2013-06-20 14:02:28 · 1124 阅读 · 0 评论 -
字符串函数汇总
面试中常常会要求写一些基本的库函数,尤其以字符串库函数考的最多,所以本文汇总了一些常见的字符串库函数的实现。此外,把与内存相关的操作函数也汇总到了一起。Cpp代码 //求字符串长度 int strlen(const char *s) { int n = 0; while (*s++ != '\0') n+转载 2013-07-31 13:34:36 · 809 阅读 · 0 评论 -
将“引用”作为函数返回值类型的格式、好处和需要遵守的规则?
格式:类型标识符 &函数名(形参列表及类型说明){ //函数体 }好处:在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的。因为随着该局部变量生存期的结束,相应的引用也会失效,产生runtime error! 注意事项:(1)不能返回局部变量的引用。这条可以参照Effective C++[1]的Item 31。主要原因是局部变量会在原创 2013-08-04 15:49:06 · 911 阅读 · 0 评论 -
变量定义和声明的区别(整理)
变量的声明有两种情况:1、一种是需要建立存储空间的。例如:int a 在声明的时候就已经建立了存储空间。2、另一种是不需要建立存储空间的。 例如:extern int a 其中变量a是在别的文件中定义的。声明是向编译器介绍名字--标识符。它告诉编译器“这个函数或变量在某处可找到,它的模样象什么”。而定义是说:“在这里建立变量”或“在这里建立函数”。它为名字分配存储空原创 2013-08-02 12:25:27 · 892 阅读 · 0 评论 -
C++中参数传递方式讨论
众所周知,在C++中调用函数时有三种参数传递方式: (1)传值调用; (2)传址调用(传指针); (3)引用传递; 实际上,还有一种参数传递方式,就是全局变量传递方式。这里的“全局”变量并不见得就是真正的全局的,所有代码都可以直接访问的,只要这个变量的作用域足够这两个函数访问就可以了,比如一个类中的两个成员函数可以使用一个成员变量实现参数传递,或者使用static关键字定义,或者使转载 2013-08-05 23:01:53 · 2017 阅读 · 0 评论 -
strcpy,memcpy,memmove,memset,strncpy
strcpy,memcpy,memmove,memset,strncpy,一.函数分别介绍:1、memcpy:原型:extern void *memcpy(void *dest, const void *src, unsigned int count);用法:#include功能:由src所指内存区域复制count个字节到dest所指内存区域。说明:src和dest所指内存转载 2013-08-05 23:53:09 · 915 阅读 · 0 评论 -
如何分配内存 内存碎片处理技术
内存碎片是一个很棘手的问题。如何分配内存决定着内存碎片是否会、何时会、如何会成为一个问题。 即使在系统中事实上仍然有许多空闲内存时,内存碎片还会最终导致出现内存用完的情况。一个不断产生内存碎片的系统,不管产生的内存碎片多么小,只要时间足够长,就会将内存用完。这种情况在许多嵌入式系统中,特别是在高可用性系统中是不可接受的。有些软件环境,如 OSE 实时操作系统已经备有避免内存碎片的良好工具转载 2013-08-06 22:43:31 · 1712 阅读 · 0 评论 -
什么时候要用虚析构函数?
什么时候要用虚析构函数? 通过基类的指针来删除派生类的对象时,基类的析构函数应该是虚的。否则其删除效果将无法实现。 一般情况下,这样的删除只能够删除基类对象,而不能删除子类对象,形成了删除一半形象,从而千万内存泄漏。原因: 在公有继承中,基类对派生类及其对象的操作,只能影响到那些从基类继承下来的成员。如果想要用基类对非继承成员进行操作,则要把基类的这个转载 2013-08-05 23:42:42 · 1711 阅读 · 0 评论 -
C++中各种数据类型的大小
数据存储是以“字节”(Byte)为单位,数据传输是以“位”(bit)为单位,一个位就代表一个0或1(即二进制),每8个位(bit)组成一个字节(Byte)。 今天在自己win32机器上对c++的数据类型的大小进行了一次测试,测试工具为VS2012。下面即为对应数据类型的大小sizeof(char)= 1sizeof(short)= 2sizeof(floa原创 2013-08-07 22:14:00 · 5127 阅读 · 1 评论 -
cdecl、stdcall、fastcall函数调用约定区别
在C语言中,假设我们有这样的一个函数: int function(int a,int b) 调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎么给这个函数传转载 2013-08-15 00:20:35 · 979 阅读 · 0 评论 -
C++结构体:默认构造函数,复制构造函数,重载=运算符
C++结构体提供了比C结构体更多的功能,如默认构造函数,复制构造函数,运算符重载,这些功能使得结构体对象能够方便的传值。比如,我定义一个简单的结构体,然后将其作为vector元素类型,要使用的话,就需要实现上述三个函数,否则就只能用指针了。#include #include using namespace std;struct ST{ int a;原创 2013-08-29 17:22:07 · 37397 阅读 · 2 评论