C/C++
SAYA_
************
展开
-
string与char*和char[]的互相转换
1.string转向char*把string转换为char* 有3种方法:第一种:data()#include#includeusing namespace std;int main(){ string str = "123456"; const char *p=str.data(); //or //char *p=(char*)str.data(); //请一转载 2015-08-09 20:15:33 · 3526 阅读 · 0 评论 -
define
#define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。该命令有两种格式:一种是简单的宏定义,另一种是带参数的宏定义。(1) 简单的宏定转载 2015-10-19 00:11:13 · 533 阅读 · 0 评论 -
C++中对字符操作的函数集锦
下面是要讲解的目录:/*1.字符转数字(atoi,atol,atof)2.查找(strstr)3.比较(strcmp)4.复制(strcpy,memcpy)5.连接两字符串(strcat)6.逆置字符数组(strrev)7.小写字母转大写(strupr)*/1.字符转数字(atoi, atol, atof)#include #include //头文件 #原创 2015-08-10 13:11:59 · 692 阅读 · 0 评论 -
C++中memcpy和memmove的区别总结
这篇文章主要介绍了C++中memcpy和memmove的区别总结,这个问题经常出现在C++的面试题目中,需要的朋友可以参考下 变量的命名我们在写程序时,一般讲究见到变量的命名,就能让别人基本知道该变量的含义。memcpy内存拷贝,没有问题;memmove,内存移动?错,如果这样理解的话,那么这篇文章你就必须要好好看看了,memmove还是内存拷贝。那么既然memcpy和m转载 2015-11-07 09:52:02 · 864 阅读 · 0 评论 -
C++标识符override(覆盖),final(禁止),隐藏
1.覆盖(也叫重写)#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1 #includeusing namespace std;class Base{public: Base() {} virtual void show(char ch) { cout << "Base"; cout << ch << endl;原创 2015-10-22 18:58:18 · 1327 阅读 · 0 评论 -
右值引用C++11
C++ 11中引入的一个非常重要的概念就是右值引用。理解右值引用是学习“移动语义”(move semantics)的基础。而要理解右值引用,就必须先区分左值与右值。 对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的就是右值。左值和右值都是针对表达式而言的,左值是指表达式结束后依然存在的持久对象,右值是指表达式结束时就不再存在的临时对象。一个区分左值与右值的便捷方法是转载 2015-10-22 11:42:12 · 675 阅读 · 0 评论 -
Visual Studio2015错误C4996 'strcpy': This function or variable may be unsafe. Consider using strcpy_
原因是Visual C++ 2012 使用了更加安全的 run-time library routines 。新的Security CRT functions(就是那些带有“_s”后缀的函数)解决办法:在头文件前加(一定要在没有include任何头文件之前)#define _CRT_SECURE_NO_DEPRECATE或者#define _CRT_SECURE_C转载 2015-10-08 23:58:59 · 3931 阅读 · 1 评论 -
深入理解C++浮点数(float、double)类型数据比较、相等判断
浮点数在内存中的存储机制和整型数不同,其有舍入误差,在计算机中用近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法。所以浮点数在运算过程中通常伴随着因为无法精确表示而进行的近似或舍入。但是这种设计的好处是可以在固定的长度上存储更大范围的数。1、将字符串转换为float、double转载 2015-11-08 11:29:16 · 1595 阅读 · 0 评论 -
enum
#includeusing namespace std;int main(){ enum Week{monday=1,tuesday,wednesday,thursday,friday,staturday,sunday};//monday,tuesday等称为枚举子 //在当前代码中不可以出现不同枚举类型的相同枚举子。例如此代码中又出现enum Today{monday,tuesday原创 2015-09-16 08:02:03 · 345 阅读 · 0 评论 -
数组指针和指针数组
1、数组指针(指向数组的指针)(1)数组在内存中的表示创建一个数组就是在内存里面开辟一块连续的空间,比如int a[4];就是在内存里面开辟了一个大小为4*sizeof(int)字节的内存空间。二维数组是特殊的一维数组。先来看一段代码:[cpp] view plaincopy"font-size:16px;">void mai转载 2015-10-24 23:11:43 · 578 阅读 · 0 评论 -
C++按位运算符
位运算是指按二进制进行的运算。在程序中,常常需要处理二进制位的问题。C/C++语言提供了6个位操作运算符。这些运算符只能用于整型操作数,即只能用于带符号或无符号的char,short,int与long类型。在实际应用中,建议用unsigned整型操作数,因为带符号操作数可能因为不同机器结果不同。C/C++位操作运算符操作符功能用法~位求反~exp原创 2015-10-24 14:05:20 · 636 阅读 · 0 评论 -
读入优化与clock()
C/C++中的计时函数是clock(),而与其相关的数据类型是clock_t。在MSDN中,查得对clock函数定义如下: clock_t clock(void ); 这个函数返回从“开启这个程序进程”到“程序中调用clock()函数”时之间的CPU时钟计时单元(clock tick)数,在MSDN中称之为挂钟时间(wal-clock)。其中clock_t是用来保存时间的数据类型,在tim原创 2015-10-11 13:44:17 · 433 阅读 · 0 评论 -
&&和& ;||和|
&&短路与&与(非短路与)||短路或|或(非短路或)关于它们的用法可以百度,这里介绍它们的区别:就拿“与”来说,要求所有的条件都判断;而如果使用短路与,第一个条件为false的话,则后面的条件将不会判断下面看几段代码就全懂了:#includeusing namespace std;int main(){ if (10 != 10 & 10 /原创 2015-10-25 16:33:31 · 424 阅读 · 0 评论 -
C++的for语句详解
for(int i=0;i cout这是很简单的语句了来看下一句代码#include int main(){ for (int i; i = 0, ++i < 10;) std::cout << i << std::endl; return 0;}输出什么呢?是的,运行后,无限输出1我们来看一下for ( #1 ; #2 ; #3原创 2015-11-02 13:04:32 · 5847 阅读 · 0 评论 -
const
#define _CRT_SECURE_NO_DEPRECATE//#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1#include#includeusing namespace std;int main(){ const int a;//error const int b = 1;//right string str1 =原创 2015-10-18 14:11:37 · 465 阅读 · 0 评论 -
编译,运行
认识C编译执行过程,是C学习的开端。简单说C语言从编码编译到执行要经历一下过程: C源代码编译---->形成目标代码,目标代码是在目标机器上运行的代码。连接---->将目标代码与C函数库相连接,并将源程序所用的库代码与目标代码合并,并形成最终可执行的二进制机器代码(程序)。执行----->在特定的机器环境下运行C程序。 如果用一个图 来表示: 以上转载 2015-10-18 12:55:57 · 529 阅读 · 0 评论 -
nullptr----C++11
原文链接: http://blog.csdn.net/huang_xw/article/details/8764346#comments1. 引入nullptr的原因引入nullptr的原因,这个要从NULL说起。对于C和C++程序员来说,一定不会对NULL感到陌生。但是C和C++中的NULL却不等价。NULL表示指针不指向任何对象,但是问题在于,NULL不是关键字,转载 2015-11-04 09:27:37 · 620 阅读 · 0 评论 -
string和C-风格字符串输入方式详解
对于C-风格字符串例如:char info[100];共有三种方式:/*1.cin>>info;2.cin.getline(info,100);3.cin.get(info,100);*/而对于string对象,有两种方式,例如string str;/*1.cin>>str;2.getline(cin,str);*/两个版本的getline()都有一个可选参数转载 2015-08-12 17:05:45 · 1209 阅读 · 0 评论 -
C++中的string常用函数集锦
我们直入主题,下面是我今天要讲解的函数列表。/*1.查找find系列2.插入insert系列3.提取substr4.删除erase*/现在来看第一个:查找函数。/*函数名 描述find 查找rfind 反向查找find_first_of转载 2015-08-09 18:11:54 · 3827 阅读 · 0 评论 -
C++中的指针深解
我们先来看段代码:void Demo(){ int *p=new int; //##1 *p=2; //##2 return; //##3} 先看##1这行,意思是为指针p和int值分配存储空间,保存地址。看下面的图:原创 2015-07-24 18:53:40 · 585 阅读 · 0 评论 -
关于结构体的操作符重载和定义在内部的函数
首先结构体和类是有相似的地方的,可以进行运算符重载。下面以=为例,#includeusing namespace std;struct P{ int a; int b; //虽然已经对结构体进行=重载,但是这里只是举一个例子而已 P& operator=(P& temp) { a=temp.a; b=temp.b; return原创 2015-09-03 21:19:40 · 2652 阅读 · 0 评论 -
C++内存详解
一.分配方式在C++中,内存分为五个区:堆,栈,自由存储区,全局/静态存储区,常量存储区。栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时,这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。堆,就是那些由new分配的内存块,他们的释放编译器不会去管,由程序员自己去释放。自由存储区,就是那些由malloc等分配的原创 2015-09-05 15:55:11 · 525 阅读 · 0 评论 -
函数名作为另一函数的参数
定义一个函数CallFunc(*****),通过其参数中的函数指针来分别调用两个函数Func1(),Func2()#include using namespace std; typedef void (*pFunc)();//定义一个函数指针类型pFunc,与 下面的Func1(),Func2()一样的类型void Func1();//函数声明void Func2();void Ca转载 2015-09-21 13:13:25 · 576 阅读 · 0 评论 -
bind
// bind example#include // std::cout#include // std::bind// a function: (also works with function object: std::divides my_divide;)double my_divide (double x, double y) {return x/y;}stru原创 2015-09-06 18:19:02 · 494 阅读 · 0 评论 -
结构体对齐问题
许多实际的计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的起始地址的值是某个数k的倍数,这就是所谓的内存对齐,而这个k则被称为该数据类型的对齐模数(alignment modulus)。这种强制的要求一来简化了处理器与内存之间传输系统的设计,二来可以提升读取数据的速度。比如这么一种处理器,它每次读写内存的时候都从某个8倍数的地址开始,一次读出或写入8个字节的数据,假如转载 2015-09-28 12:07:14 · 568 阅读 · 0 评论 -
C/C++ 中头文件相互包含引发的问题
原地址:http://blog.csdn.net/hazir/article/details/38600419我把问题脱离于项目简单描述一下:我写了一个函数 bool func(ClassA* CA) 需要加到项目中,我就把这个函数的声明放到 head1.h 中,函数参数类型 ClassA 定义在另一个头文件 head2.h 中,因此我需要在 head1.h 中包含 head2.h;而 h转载 2015-09-28 11:53:54 · 460 阅读 · 0 评论 -
round,floor,ceil,trunc
直接贴上C Plus Plus的代码,很容易懂/* round vs floor vs ceil vs trunc */#include /* printf */#include /* round, floor, ceil, trunc */int main (){ const char * format = "%.1f \t%.1f \t%.1f \t%原创 2015-09-13 22:21:19 · 406 阅读 · 0 评论 -
输出的对齐与填充字符
头文件:#include #includeusing namespace std;int main(){ int a = 9999; int b = 999; int c = 99; cout << setw(6) << a << endl; cout << setw(6) << b << endl; cout << setw(6) << c << endl; /*原创 2015-10-01 12:09:54 · 1228 阅读 · 0 评论 -
控制整数以10,16,8进制输出
我们可以分别使用dec,hex,oct控制符来实现。下面的函数调用将cout对象的计数系统格式状态设置为16进制:hex(cout);完成上述设置后,程序将以16进制打印数值,直到将格式设置为其他选项为止。注意,控制符不是成员函数,因此不必通过对象调用。虽然控制符实际上是函数,但它们通常的使用方式为:coutostream类重载了#include using na原创 2015-10-17 15:03:23 · 885 阅读 · 0 评论 -
如何保留小数
头文件:#include#includeusing namespace std;int main(){ double a=3.141111; double b = 3.149999; cout << fixed << setprecision(2) << a << " "<<b<<endl;//#1 cout << setiosflags(ios::fixed) << s原创 2015-10-01 10:45:39 · 514 阅读 · 0 评论 -
POD对象
POD类型(Plain Old Data),就是C++里面和C内存结构上完全兼容的结构。 对于POD类型T的对象,不管这个对象是否拥有类型T的有效值,如果将该对象的底层字节序列复制到一个字符数组(或者无符号字符数组)中,再将其复制回对象,那么该对象的值与原始值一样。 对于任意的POD类型T,如果两个T指针分别指向两个不同的对象obj1和obj2,如果用memcpy库转载 2015-11-07 13:23:15 · 1104 阅读 · 0 评论