C/C++
行者小朱
stay hungry,stay foolish
展开
-
C++中const与#define的区别
先上一个典型程序:#includeusing namespace std;int main(){ int num = 1; #define t1 num + num #define t2 t1 % t1 cout << "t2 is " << t2 << endl; // t2 is 2 const int s1 = num + num; const int s2 =原创 2016-03-28 21:43:13 · 2096 阅读 · 1 评论 -
C++的内存分配
前面复习的Java的内存分配,这里顺带复习一下C++的内存分配。1、栈:就是那些由编译器在需要的时候分配,不需要的时候自动清理的变量存储区。里面的变量通常是局部变量、函数参数等;2、堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序控制,需要时new一个用完就delete掉(一般一个new对应一个delete),如果程序员没有释放则程序结束后操作系统会自动回收,操作原创 2016-04-17 16:31:58 · 362 阅读 · 0 评论 -
C语言三种预处理功能
1. 宏定义2. 文件包含3. 条件编译伪指令(或预处理指令)定义:预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。下面是部分预处理指令:指令 用途# 空指令,无任转载 2016-06-15 15:37:57 · 20426 阅读 · 5 评论 -
Java与C++程序在编译和运行上的区别
Java、C++都属于高级语言,而计算机能认识执行的只是机器码(即二进制),所以高级语言都必须经过直接或间接的转换成汇编以后,才能运行。对于C/C++这类高级计算机语言,它们的编译器(例如Unix下的CC命令、Windows下的CL命令)都是可以把源码直接编译成计算机可以认识的机器码,如exe、dll之类的文件,然后直接运行。而Java语言的跨平台性是它最大的特点之一,这就达成了Java程原创 2016-07-26 10:25:42 · 2159 阅读 · 0 评论 -
解析C++中四种强制类型转换的区别详解
C++的四种强制类型转换,所以C++不是类型安全的。分别为:static_cast , dynamic_cast , const_cast , reinterpret_cast为什么使用C风格的强制转换可以把想要的任何东西转换成合乎心意的类型。那为什么还需要一个新的C++类型的强制转换呢?新类型的强制转换可以提供更好的控制强制转换过程,允许控制各种不同种类的强制转换。C++中风格是stat转载 2016-05-05 09:26:46 · 819 阅读 · 0 评论 -
堆和栈的区别
内存区域一般最起码都有两种:一种是栈内存;一种是堆内存栈内存:1)存放的内容:基本类型的变量(Java中还有对象引用)、函数调用(参数值、局部变量、返回地址等)等等;2)申请方式:由程序自动分配释放的内存空间;3)申请后系统响应:只要系统中栈的剩余空间大于所申请的空间,系统将为程序提供内存,否则提示栈溢出;4)申请大小限制:Windows中栈是由高地址向低地址扩展的数据结构,是原创 2016-04-12 17:28:26 · 393 阅读 · 0 评论 -
Linux IO模式及 select、poll、epoll详解
注:本文是对众多博客的学习和总结,可能存在理解错误。请带着怀疑的眼光,同时如果有错误希望能指出。同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的。所以先限定一下本文的上下文。本文讨论的背景是Linux环境下的network IO。一 概念说明在进行解释之前,首先要说明几个概念:- 用户空间和内核空间转载 2016-12-12 15:03:38 · 417 阅读 · 0 评论 -
C/C++中指针、引用、数组、链表的区别
指针与数组可以替换使用,容易让人产生错觉二者是等价的,那么二者到底有什么区别呢?数组:在静态存储区被创建或者在栈上被创建,数组名对应着一块内存(而不是指向),其地址与容量在生命期内保持不变,且数组的内容可以改变;指针:可以随时指向任意类型的内存块,“可变”,所以指针更加灵活但也更加危险数组:用标准库函数strcpy进行复制,而不能使用b=a直接复制这将产生编译错误指针:原创 2016-03-28 22:01:27 · 1673 阅读 · 0 评论