
C++/C
DayThinking
这个作者很懒,什么都没留下…
展开
-
多线程编程与同步控制(Java与C)
一、线程池网摘文章/博客1.40个Java多线程问题总结2.生产者消费者模式实现3.volatile关键字解析4.java并发之生产者消费者模型5.linux下C语言多线程 linux中fork--子进程是从哪里开始运行6.一张图读懂Java多线程7.Java并发编程:如何创建线程?8.Java并发编程:synchronized9.Java多线程的常见例子一个进程内的多个线程是共享该进程的内存...原创 2015-12-23 09:47:39 · 1891 阅读 · 0 评论 -
深入理解指针类型间的转换
当我们初始化一个指针或给一个指针赋值时,赋值号(=)的左边是一个指针,赋值号(=)的右边是一个指针表达式,在绝大多数情况下,指针的类型和指针表达式的类型是一样的,指针所指向的类型和指针表达式所指向的类型是一样的。例一:1、 float f=12.3;2、 float*fptr=&f;3、 int *p;在上面的例子中,假如我们想让指针p指向实数f,应该怎么搞原创 2012-12-17 14:33:18 · 26303 阅读 · 9 评论 -
C++中相对路径与绝对路径以及斜杠与反斜杠的区别
文件路径正斜杠和反斜杠正斜杠,又称左斜杠,符号是"/";反斜杠,也称右斜杠,符号是"\"。文件路径的表示可以分为绝对路径和相对路径:1、绝对路径表示相对容易,例如pDummyFile =fopen("D:\\vctest\\glTexture\\texture\\dummy.bmp", "rb");给出了从盘符开始的全部路径,这里需要注意的是“\”要用双原创 2012-12-28 13:34:31 · 73870 阅读 · 6 评论 -
Windows线程间通信机制
摘 要: 随着人们对应用程序的要求越来越高,单进程应用在许多场合已不能满足人们的要求。编写多进程(多线程)程序成为现代程序设计的一个重要特点,在多进程程序设计中,进程间的通信是不可避免的。Microsoft Win32 API提供了多种进程间通信的方法,全面地阐述了这些方法的特点,并加以比较和分析,希望能给读者选择通信方法提供参考。关键词 进程 进程通信 IPC Win32 API 1转载 2012-12-20 14:19:30 · 6256 阅读 · 2 评论 -
(int)a、&a、(int)&a、(int&)a的区别
#include #include #include #include using namespace std;int main() { float a = 1.0f; cout cout cout cout cout cout /*(int&)a:将a的引用强制转换为整型,意思是a所在的内存,本来定义的时候为float类型转载 2012-12-06 21:44:07 · 1675 阅读 · 0 评论 -
C语言中指针数组和数组指针
一、指针数组和数组指针的内存布局 初学者总是分不出指针数组与数组指针的区别。其实很好理解: 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。 数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。下面到底哪个是数组指针,哪个是指针转载 2012-11-11 22:20:35 · 1396 阅读 · 0 评论 -
c++中内存拷贝函数(C++ memcpy)详解
原型:void*memcpy(void*dest, const void*src,unsigned int count); 功能:由src所指内存区域复制count个字节到dest所指内存区域。 说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。 举例: // memcpy.c原创 2012-09-17 21:30:26 · 112837 阅读 · 4 评论 -
x&(x-1)的含义
求下面函数的返回值(微软) ---------统计1的个数int func(int x){int countx = 0;while(x){countx++;x = x&(x-1);}return countx;} 假定x = 999910011100001111答案: 8思路: 将x转化为2进制,看含有的1的个数。注: 每执行一次x原创 2012-09-19 19:36:38 · 14832 阅读 · 2 评论 -
C/C++下字符串常量的修改
请在(且只能在TC2.0)中运行下面代码,先不要看结果,想想会得到什么: #include #include int main(int argn, char*argv[]) { char* szStringA = "Hello,world!"; char* szStringB转载 2012-07-10 16:24:55 · 1871 阅读 · 0 评论 -
C++中字符型变量的地址输出
在C++中,如果cout一个字符数组的话,那么它会沿着这个地址,一直输出这个字符串,直到遇到'\0',例如: char*c="cadn\0hello"; cout输出的结果是:cadn如果我们自作聪明的想输出第一个字符的地址,例如这样输出: cout不幸的是,这样输出的结果依旧不是我们需要的地址。但是,如果我们回归到C语言的话,例如用printf的话,如下: pri原创 2012-09-15 19:38:50 · 13291 阅读 · 8 评论 -
类的定义和声明必须放在main函数前
记住:类的定义和声明必须放在main函数前void FunTest(); class Test //完整定义放在前面{ public: Test(){} }; class Test;//只声明不定义int main() { Test test; //需要类的完整定义 Test* ptest; //使用指针,可以只用class Test} void原创 2012-09-13 16:05:50 · 6903 阅读 · 0 评论 -
C语言编程过程详解
C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织形成最终生成可执行代码的过程。过程图解如下: 从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分转载 2013-02-07 09:51:23 · 164850 阅读 · 0 评论 -
com组件编程
1.单字节,多字节和宽字节abc2.进程外com与进程内com的区别(主要在注册方面)abc3.com控件字符串参数传递abc原创 2016-02-29 00:36:36 · 1731 阅读 · 0 评论 -
C++ 虚函数表解析
参考网站内容:C++ 虚函数表解析:http://blog.youkuaiyun.com/haoel/article/details/1948051C++ 对象的内存布局:http://blog.youkuaiyun.com/haoel/article/details/3081328/(int*)*(int*)(&b)的理解:http://topic.youkuaiyun.com/u/20090904/15/c6cf转载 2012-06-19 15:17:19 · 813 阅读 · 0 评论 -
点滴贵于金
一、线程同步基本原理:在同步过程中,两个最重要的概念是同步对象和等待函数。在线程同步过程中,需要先定义一个同步对象,同步对象一般具有两种状态:标志的(置位,signaled)和未标志的(未置位,nonsignaled)。线程根据是否已经完成操作将同步对象设置为标志的或未标志的。而等待函数的功能是专门用于等待同步对象状态改变。一个线程调用等待函数后执行会暂停,直到同步对象的状态改变后,等原创 2013-06-08 09:51:27 · 1099 阅读 · 0 评论 -
内存管理——堆与栈
首先看程序例1:#include "stdafx.h"#includeusing namespace std;int _tmain(int argc, _TCHAR* argv[]){ //在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。ch作为一个整体被分配到内存中,在ch中ch[0]存放在低地址; char ch[2]; int i; cout.原创 2012-08-23 08:50:12 · 1299 阅读 · 0 评论 -
C语言文本方式和二进制方式打开文件区别
我们都知道,文本文件和二进制文件在计算机上面都是以0,1存储的,那么两者怎么还存在差别呢?我觉得,对于编程人员,文本文件和二进制文件就是一个声明,指明了你应该以什么方式(文本方式/二进制)打开这个文件,用什么函数读写这个文件(读写函数),怎么判断读到这个文件结尾。具体的说:1。以哪种方式打开一个文件?ANSI C规定了标准输入输出函数库,用fopen()函数打开文件。fopen()转载 2012-04-01 19:46:53 · 10058 阅读 · 1 评论 -
C语言中数据类型的表示范围
问题:sizeof(int) = 2,int的表示范围为什么是-2^15~2^15-1?答:对于有符号数,最高位为符号位。二进制原码最大值为0111111111111111=2^15-1,最小值为 1111111111111111=-(2^15-1),而0分为+0和-0,即0000000000000000和1000000000000000。所以,当以二进制原码表示时,int转载 2014-10-22 20:40:37 · 3532 阅读 · 0 评论 -
指针参数--指针做参数时应该注意的地方
程序1:void myMalloc(char *s) //我想在函数中分配内存,再返回{ s=(char *) malloc(100);}void main(){ char *p=NULL; myMalloc(p); //这里的p实际还是NULL,p的值没有改变,为什么? if(p) free(p);}程序2:void myMalloc(ch原创 2013-06-06 11:53:20 · 6051 阅读 · 0 评论 -
我对虚函数的理解
虚函数是具备这样一种能力的函数:能够在知道少量信息的情况下判断出自己的所属者,进而调用所属者里对应的函数。以虚析构函数为例解释下,当我们释放一个用基类的指针指向派生类的对象时(Base*pBase = objChild;delete pBase),这时候如果析构函数不是虚函数,就不能正确识别对象类型从而不能正确调用析构函数;而如果析构函数是虚函数的话,当delete 基类指针时,虚析构函数能够准确原创 2014-08-09 12:23:20 · 1017 阅读 · 0 评论 -
C++构造函数初始化列表
先看两个例子:Demo原创 2014-08-07 19:36:02 · 2267 阅读 · 1 评论 -
字符串字面值、C风格字符串、C++风格字符串
详细见次品懒人的总结:http://www.cnblogs.com/coveted/archive/2011/12/28/2304509.htmlc字符串、string对象、字符串字面值的区别 字符串的连接:1.c++中string可以替代c中的char数组且前者用起来更方便。连接两个string对象只需用'+';c字符串是用char数组实现的。以下都称c字符串为char数转载 2012-03-03 11:22:09 · 741 阅读 · 0 评论 -
虚基类、虚函数与纯虚函数
虚基类 在说明其作用前先看一段代码class A{public: int iValue;};class B:public A{public: void bPrintf(){cout};class C:public A{public: void cPrintf(){cout};class原创 2014-02-15 23:41:51 · 873 阅读 · 0 评论 -
c++对象切割(Object Slicing)
当把一个派生类对象赋给一个基类对象时,会发生对象切割。(另外用基类对象强制转换派生类对象也会)对象切割会发生什么呢?#include "stdafx.h"#include using namespace std;class CShape{public: CShape () { m_color=0; } ~CShape(){} virtual void draw()原创 2012-08-01 09:00:03 · 4193 阅读 · 1 评论 -
指向指针的指针做函数的参数
一. 回顾指针概念: 今天我们又要学习一个叫做指向另一指针地址的指针。让我们先回顾一下指针的概念吧! 当我们程序如下申明变量: short int i; char a; short int * pi; 程序会在内存某地址空间上为各变量开辟空间,如下图所示。 内存地址→6 7 8 9 10 11 12 13 1转载 2012-04-15 10:22:07 · 12636 阅读 · 1 评论 -
C++流 rdbuf()以及seekg()/seekp()与tellg()/tellp()的用法详解
我们使用STL编程的时候有时候会想到把一个流对象指向的内容用另一个流对象来输出,比如想把一个文件的内容输出到显示器上,我们可以用简单的两行代码就可以完成。ifstream infile("test.txt");cout 上面的代码就把infile流对象中的流重定向到标准输出cout上,您可以在屏幕上看到test.txt的内容。下面的例子来自MSDN,清晰的描述了rdbuf函转载 2012-04-17 14:51:59 · 14732 阅读 · 0 评论 -
Clock
计算程序执行所需的时间:clock_t clock( void );clock_t start,finish;#include #include #include void sleep( clock_t wait );void main( void ){ long i = 600000L; clock_t start, finish; double原创 2012-04-11 10:14:49 · 748 阅读 · 0 评论 -
C++四种新的型别转换操作符
static_cast:将一个值以符合逻辑的方式转型。这课看做是“利用原值重建一个临时对象,并在设立初值时使用型别转换”。唯有当上述的型别转换有所定义,整个转换才会成功。所谓的“有所定义”,可以是语言内建规则,也可以是程序员自定的转换动作没有运行时类型检查来保证转换的安全性static_cast 数制转换主要有如下几种用法: ①用于类层次结构中基类(父类)和派生类转载 2012-04-11 11:01:47 · 665 阅读 · 0 评论 -
IOStream
一 IOStream的基本概念1 stream对象stream就是一条数据流,是由某个类别定义出来的具有特定类型的对象,输出操作被定义为“数据流入stream”,输入操作被称为“数据流出stream”,另外有些标准的I/O通道(Channels)被定义为标准的全局对象,比如basic_istreamin,basic_ostream2 stream类别stream主要分为用于输入原创 2012-04-10 09:15:01 · 926 阅读 · 0 评论 -
STL组件(components)之容器(container)
STL组件(components)之容器(container)容器的分类:序列式容器(sequence container)和关联式容器(association container)。其中,序列式容器又称可序(ordered)群集,每个元素的位置取决于插入时机和地点与元素值没有关系,STL中提供了三个这样的容器:vector、deque和list;关联式容器又称为已序群集,元素位置取决于特原创 2012-04-04 16:08:26 · 2829 阅读 · 0 评论 -
<C++学习笔记>预处理功能
预处理功能介绍 为有助于执行编译过程,经常可以使用一些预处理命令。每条预处理命令都具备一定的预处理功能。 常用的预处理命令有以下三项: 1.宏定义命令 2.文件包含命令 3.条件编译命令。预处理命令具有以下特点:1.在左边加 # 号,作为标志。2.一般独占一行。3转载 2012-03-19 19:25:33 · 716 阅读 · 0 评论 -
static_cast、dynamic_cast reinterpret_cast和const_
参考:http://www.cnblogs.com/chio/archive/2007/07/18/822389.html首先回顾一下C++类型转换:C++类型转换分为:隐式类型转换和显式类型转换第1部分. 隐式类型转换又称为“标准转换”,包括以下几种情况:1) 算术转换(Arithmetic conversion) : 在混合类型的算术表达式中,转载 2012-03-26 10:02:01 · 898 阅读 · 0 评论 -
strcpy/memcpy/memmove三者的区别
声明:以下内容为网络整理的结果!它们用处不同,但大部分情况下可以完成相同的要求。strcpy原型:extern char *strcpy(char *dest,char *src);用法:#include 功能:把src所指由NULL结束的字符串复制到dest所指的数组中。说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串转载 2012-05-02 08:30:47 · 721 阅读 · 0 评论 -
编译器编译原理详解
第一篇摘自:http://www.21ic.com/app/embed/201103/79359.htm1. 词法分析词法分析器根据词法规则识别出源程序中的各个记号(token),每个记号代表一类单词(lexeme)。源程序中常见的记号可以归为几大类:关键字、标识符、字面量和特殊符号。词法分析器的输入是源程序,输出是识别的记号流。词法分析器的任务是把源文件的字符流转换成记号流。本质上它查看转载 2012-05-04 20:15:23 · 10778 阅读 · 0 评论 -
内存对齐
首先由一个程序引入话题://环境:vc6 + windows sp2程序1:#include "stdafx.h"#include using namespace std; struct st1 { char a ; int b ; short c ; }; struct st2{ short c ; char a ; int b转载 2012-06-19 08:46:08 · 580 阅读 · 0 评论 -
联合+结构+大小端+字节对齐
联合(union)与结构的区别是:结构变量的各成员同时被分配了各自独立的内存区,而联合变量的各个成员的存储开始地址都相同,所以在任一时刻联合变量只能存储一个成员。系统为联合变量分配空间时按需要最大存储量的成员大小分配内存空间。联合被称为一种特殊的类(它因编译器不能知道成员的类型,而没有构造函数和析构函数,所以联合的对象不是由构造函数生成的。故称特殊的类)。例1:#include原创 2012-08-23 08:36:21 · 5054 阅读 · 0 评论 -
vs2010控制台程序下绘制图形
#include "stdafx.h"//#include //#include #include #include using namespace std;inline int round(float val) {return int(val+0.5);}//inline void SetPixel(int x,int y){glBegin(GL_POINTS);glVertex2原创 2012-07-20 14:52:51 · 8568 阅读 · 0 评论 -
C++私有构造函数
本文摘自:http://hi.baidu.com/mythmgn/blog/item/d395180202f7cc0b4bfb51a6.html类的构造函数一般是public的,但是也可以是private的。构造函数为私有的类有这样的特点:不能实例化:因为实例化时类外部无法访问其内部的私有的构造函数;不能继承:同;所以它可以控制用户实例化一个类对象。实例化的这样的类的方法是转载 2012-05-05 09:07:50 · 2258 阅读 · 0 评论