C
文章平均质量分 77
青莲太初
这个作者很懒,什么都没留下…
展开
-
C语言中的位域
一、前言 有些信息在存储时,并不需要占用一个完整的字节, 而只需占几个或一个二进制位。为了节省存储空间,并使处理简便,C语言又提供了一种数据结构,称为“位域”或“位段”。所谓“位域”是把一个字节中的二进位划分为几个不同的区域,并说明每个区域的位数。每个域有一个域名,允许在程序中按域名进行操作。 这样就可以把几个不同的对象用一个字节的二进制位域来表示。二、位域的定义和位域变量的说明转载 2012-09-27 10:37:44 · 763 阅读 · 0 评论 -
VC 的DLL应用(含Demo演示)
作者:一点一滴的Beer Email /Gtalk:[email protected] 出处:http://www.cnblogs.com/beer/VC++的DLL应用(含Demo演示)作者:一点一滴的Beer http://beer.cnblogs.com/ 在大学大一的时候学的是C,然后后来大二的时候专业又开了C++这个课程,然后再后来自己又自转载 2012-10-06 21:25:25 · 511 阅读 · 0 评论 -
面向对象的基本概念
面试例题1:对象与实例有什么区别?解析:在Java的内存分配中,对象和实例是不同的,前者分配在内存堆里,后者分配在堆栈里,至于为什么要这样分,参考一下其他的资料。对象是不变的东西,它是对客观事物的抽象,实例是对操作对象的引用,你不能直接操作对象。答案:对象和实例从宏观的角度看,区别是:对象是同类事物的一种抽象表现形式,而实例是对象的具体化,一个对象可以实例化很多实例,对象就是一个模转载 2012-09-15 21:47:51 · 503 阅读 · 0 评论 -
C++基础:动态链接库调用方法总结
动态链接库的动态调用(也叫显式调用)我是可以运用了,但是静态调用(也叫隐式调用)我其实还是没有掌握,这次就借这个机会把动态库的两种用法再熟悉一下。(一)先回顾一下,动态链接库和静态链接库 静态链接库:lib中的函数不仅被连接,全部实现都被直接包含在最终生成的EXE文件中,只是实现是不可见的。动态链接库:dll不必被包含在最终的EXE中,静态调用时仅把函数名或者变量名或者类名链接到E转载 2012-10-06 21:19:57 · 886 阅读 · 0 评论 -
vs2010中动态链接库的编写和调用
vs2010中动态链接库的编写和调用一,编写动态链接库创建一个win32控制台应用程序,选择dll类型。在生成的空文件中输入如下代码:extern "C" _declspec(dllexport) int add(int i,int j){return i+j;}编译即可生成dll,lib(输入符号文件,非静态库的意思)文件二,新建一个win32控制台工程t转载 2012-10-06 21:28:26 · 920 阅读 · 0 评论 -
私有构造函数 私有析构函数
很多情况下要求当前的程序中只有一个object。例如一个程序只有一个和数据库的连接,只有一个鼠标的object。通常我们都将构造函数的声明置于public区段,假如我们将其放入private区段中会发生什么样的后果?这意味着什么? 当我们在程序中声明一个对象时,编译器为调用构造函数(如果有的话),而这个调用将通常是外部的,也就是说它不属于class对象本身的调用,假如构造函数是私转载 2012-10-07 16:51:17 · 1357 阅读 · 0 评论 -
sizeof
(1)#include "stdafx.h"#include using namespace std;class A{public:A(){}A(int a):m_a(a){}virtual void print(){cout}private:int m_a;};class B:public virtual A{转载 2012-09-19 21:23:48 · 455 阅读 · 0 评论 -
sizeof 和 strlen 的区别
一、解说1、sizeof是运算符,strlen是函数2、sizeof操作符的结果类型是size_t,它在头文件中的typedef为unsigned int 类型。该类型能保证足够容纳所建立的大对象的字节大小3、sizeof可以用类型作参数,strlen只能用char *做参数,且必须是以‘\0’结尾,此外sizeof还可以用函数来做参数 short f(); printf("%转载 2012-09-20 08:20:33 · 369 阅读 · 0 评论 -
union 共用体的使用
union 共用体名{ 数据类型 成员名; 数据类型 成员名; ... } 变量名; 共用体表示几个变量共用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。在union中,所转载 2012-10-14 22:58:57 · 462 阅读 · 0 评论 -
dynamic_cast介绍
dynamic_cast (expression)这个表达式将 expression 转换为一个 type-id 类型的对象。 Type-id 必须是一个指针、指向一个已经定义类的类型或一个指向 VOID 的指针。 Expression 的类型必须是一个指针,如果 type-id 是一个指针;当 type-id 是一个引用的时候必须是一个左值。如果 type-id 是一个到 express转载 2012-09-24 21:18:40 · 353 阅读 · 0 评论 -
_stdcall, cdecl,fastcall, this call ,naked call
对_stdcall 的理解在C语言中,假设我们有这样的一个函数:int function(int a,int b)调用时只要用result = function(1,2)这样的方式就可以使用这个函数。但是,当高级语言被编译成计算机可以识别的机器码时,有一个问题就凸现出来:在CPU中,计算机没有办法知道一个函数调用需要多少个、什么样的参数,也没有硬件可以保存这些参数。也就是说,计算机不知道怎转载 2012-09-25 18:36:31 · 440 阅读 · 0 评论 -
怎么理解C++编译、连接、运行
编译是将各个模块转化为机器语言的对象文件连接就是把这些对象文件再组合,将模块与模块之间的入口与出口衔接起来例如你自己写个单文件程序,你自己的程序是一个模块然后你在头文件里面调用的东西又是几个模块各个模块之间被调用的函数称为符号编译的时候引用其他模块的地方用符号标注,但是不指向实际地址连接的时候将模块进行组合,求得各个符号的偏移地质,再按照符号列表填入各个模块实现实际调用,这转载 2012-09-25 22:13:38 · 514 阅读 · 0 评论 -
指针与数组的区别
区别之一在于定义与声明时如: extern int * a; extern int a[]; extern int * a;extern int a[];下面讨论中的“对象”一词仅指变量、函数等,不包括OO中的对象首先应清楚区别定义与声明:声明所说明的并非自身,而是描述其他地方创建的对象,声明并未为对象分配内存;而定义为对象分配了内存。由于声明并未给对转载 2012-09-30 09:20:56 · 621 阅读 · 0 评论 -
c++中堆、栈内存分配
一、一个由C/C++编译程序占用内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数参数值,局部变量值等。其操作方式类似于数据结构中栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量存储是转载 2012-09-30 09:03:50 · 588 阅读 · 0 评论 -
模块的耦合度
耦合性(或称“耦合度”)英文 : coupling 耦合性是程序结构中各个模块之间相互关联的度量。它取决于各个模块之间接口的复杂程度、调用模块的方式以及哪些信息通过接口。 一般模块之间可能的连接方式有七种,构成耦合性的七种类型。它们之间的关系为 (1)非直接耦合(Nondirect coupling) 如果两个模块之间没有直接关系,它们之间的联系完全是通过主模块的控制和转载 2012-09-27 17:52:21 · 2470 阅读 · 0 评论 -
c语言静态变量、静态函数和函数可重入
static C语言 C语言程序可以看成由一系列外部对象构成,这些外部对象可能是变量或函数。而内部变量是指定义在函数内部的函数参数及变量。外部变量定义在函数之外,因此可以在许多函数中使用。由于C语言不允许在一个函数中定义其它函数,因此函数本身只能是“外部的”。 由于C语言代码是以文件为单位来组织的,在一个源程序所有源文件中,一个外部变量或函数只能在某个文件中定义一次转载 2012-09-27 22:20:54 · 2673 阅读 · 0 评论 -
-2比2小吗? C++ 中 unsigned int 和 int的比较
一,问题的来源在使用stl的时候,经常要遍历容器。遍历容器有几种方法,一种就是使用下标遍历。在使用下标遍历的时候,经常要用到一个遍历的循环变量,往往这个变量一顺手就写成了: 1: int i = 0;这个i在一般的情况下是没有问题的,然后最近突发奇想,想像python那样,能够支持负的下标。比如v是一个vector,v[-2]表示后两个元素。 二转载 2012-09-27 15:31:40 · 1955 阅读 · 0 评论 -
可重入函数
一、可重入函数1)什么是可重入性?可重入(reentrant)函数可以由多于一个任务并发使用,而不必担心数据错误。相反,不可重入(non-reentrant)函数不能由超过一个任务所共享,除非能确保函数的互斥(或者使用信号量,或者在代码的关键部分禁用中断)。可重入函数可以在任意时刻被中断,稍后再继续运行,不会丢失数据。可重入函数要么使用本地变量,要么在使用全局变量时保护自己的数据。转载 2012-09-27 18:07:16 · 582 阅读 · 0 评论 -
堆变量和栈变量
全局,静态,new产生的变量都在堆中动态分配的变量在堆中分配 局部变量在栈里分配函数中声明的变量在栈中 用了new标示符在堆中 全局变量和static变量都在全局区程序为栈变量分配动态内存,在程序结束时为栈变量分配的空间将自动释放;而为堆变量分配的空间则不会自动释放,若在程序中没有没有释放堆变量,它将一直占用系统内存。堆栈是一种执行“后进先出”算法的数据结构。转载 2012-09-28 10:36:00 · 810 阅读 · 0 评论 -
c语言的优先级
Table0. 为什么要掌握优先级1. 优先级1.1 优先级图表1.2 运算符实例1.3 优先级顺口溜2. 结合性3. 参考资料Link:http://blog.chinaunix.net/space. ... blog&id=2880933 写代码的时候,常会翻看的一个表就是“c语言运算符优先级表”。c的运算符优先级常常很让人头疼。其实,在大学里转载 2012-09-27 15:23:45 · 791 阅读 · 0 评论 -
C语言中volatile关键字的作用
目录(?)[-]一.前言二.volatile详解:一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写转载 2012-09-27 17:03:01 · 865 阅读 · 0 评论 -
C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别
1.C++变量根据定义的位置的不同的生命周期,具有不同的作用域,作用域可分为6种:全局作用域,局部作用域,语句作用域,类作用域,命名空间作用域和文件作用域。从作用域看:1>全局变量具有全局作用域。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。2>静态局部变量具有局部作用域,它只被初始化一转载 2012-09-27 17:11:01 · 844 阅读 · 0 评论 -
malloc(0)
问题:char* ptr = malloc(0*sizeof(char));if(NULL == ptr) printf("got a NULL pointer");else printf("got a Valid pointer");请问:上面的程序输出为什么?在C99的标准里面解释到,如果给malloc传递0参数,其返回值是依赖于编译器转载 2012-09-28 17:21:33 · 412 阅读 · 0 评论 -
字节存放顺序:大尾,小尾
字节存放有大尾和小尾之分。如果对应数据的高字节存放在低地址就是大尾,反之,高字节存放在高地址的就是小尾。比如 short int a = 0x1234大尾存放时:偏移地址 存放内容0x0000 0x120x0001 0x34小尾存放:偏移地址 存放内容0x0000 0x340x0001 0x转载 2012-09-28 17:28:06 · 1254 阅读 · 0 评论 -
const指针,const int * p, int *const p,int const * p的区别
#include using namespace std;int main(){ int Int1 = 1; int Int2 = 0; const int* pInt1 = &Int1;//声明一个指向常量的指针,指针是可变的,但是所指向的内存单元的内容不可变 int* const pInt2 = &Int2;//声明了一个常量指针,指针是转载 2012-09-27 16:44:36 · 460 阅读 · 0 评论 -
C/C++ 各种计时函数总结
本文对Windows平台下常用的计时函数进行总结,包括精度为秒、毫秒、微秒三种精度的5种方法。分为在标准C/C++下的二种time()及clock(),标准C/C++所以使用的time()及clock()不仅可以用在Windows系统,也可以用于Linux系统。在Windows系统下三种,使用Windows提供的API接口timeGetTime()、GetTickCount()及QueryPerf转载 2013-06-03 08:27:42 · 848 阅读 · 1 评论