
c/c++
hanghangde
java ee
展开
-
va_start和va_end使用详解
本文主要介绍va_start和va_end的使用及原理。 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。 介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理: 1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表void foo(...);voi转载 2015-11-23 11:02:35 · 444 阅读 · 0 评论 -
GCC编译器和make命令
来源自:http://dev.yesky.com/474/7596974.shtmlGCC是Linux平台下最重要的开发工具,它是GNU的C和C++编译器,其基本用法为:gcc [options] [filenames] options为编译选项,GCC总共提供的编译选项超过100个,但只有少数几个会被频繁使用,我们仅对几个常用选项进行介绍。 假设我们编译一输出“H转载 2015-12-27 11:51:53 · 6412 阅读 · 0 评论 -
C++风格的注释
5.4 C++风格的注释5.4.1 概述C++的注释风格主要使用下面这种样式:即在注释块开始使用三个反斜杠‘/’其他地方其实与JavaDoc的风格类似,只是C++风格不用 “*” 罢了。5.4.2 简述与详述C++风格的简述与详述方式与javaDoc类似。一般注释的描述由简述开始,经过特殊分隔方式后,后面紧跟详述的内容,C++风格可以使用的分隔方转载 2016-03-07 17:45:52 · 3798 阅读 · 0 评论 -
语言编程中返回false和true的易错点
如果一个方法中要判断多个条件来决定返回false或true时,各个条件来判断他的false返回flase,最后返回true,例如下面的判断输入的日期是否正确bool Date::Legal(int y, int m, int d) { int timeLimit=31; //先返回假 if (y 9999) return false; if (m 12)原创 2016-03-07 18:28:50 · 2715 阅读 · 0 评论 -
c++内存分配方式
内存的堆分配和栈分配 堆和栈的区别一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(转载 2016-04-04 22:02:12 · 382 阅读 · 0 评论 -
c++中的delete []异常
昨天一个小学弟写c++程序是出现了一个问题后来经过我们和一个大三的学长讨论解决了这个问题感觉不错,拿出分享他报错这个错 代码如下:`#include using namespace std; class Point{ public: Point(); Point(int x,int y,char * str){ this->x=x; this->y原创 2016-04-05 15:09:33 · 3604 阅读 · 1 评论 -
c/c++中的条件编译实例
我们在写程序的过程中老是在头文件用这样的语句: #ifdef 标志符 程序段1 #else 程序段2 #endif 我们知道这是为了进行条件编译。即当定义了标志符则对程序段1进行编译,而没有定义标志符时则编译程序段2。那么为什么要这要呢? 其实这跟事物具有多样性一样。我们需要对不同的原创 2016-04-11 17:18:30 · 9560 阅读 · 0 评论 -
VS2008动态链接库(DLL)的创建与导入
一、创建新的动态链接库(DLL)项目从“File”菜单中,选择“New”,然后选择“Project…”。如下图:在“项目类型”窗格中,选择“Visual C++”下的“Win32”。在“模板”窗格中,选择“Win32 Console Application”。为项目选择一个名称,如 MathFuncsDll,并将其键入“Name:”字段。 为解决方案选择一个名称,如 Dynamic转载 2016-04-11 19:43:11 · 5322 阅读 · 0 评论 -
如何用MinGW 命令行编译链接c/c++
一直用VS,看现在Eclipse很火,便想弄一下玩玩,用到了MINGW,继而用到了GCC,对GCC相当的不熟悉,从头开始学一些简单的吧。 简单的GCC用法~ gcc命令提供了非常多的命令选项,但并不是所有都要熟悉,初学时掌握几个常用的就可以了,到后面再慢慢学习其它选项,免得因选项太多而打击了学习的信心。 一. 常用编译命令选项 假设源程序文件名为test.c。转载 2015-12-27 11:32:42 · 973 阅读 · 2 评论 -
Vs解决方案的目录结构设置和管理
以下内容为“原创”+“转载”首先,解决方案和项目文件夹包含关系(c++项目):VS解决方案和各个项目文件夹以及解决方案和各个项目对应的配置文件包含关系,假设新建一个项目ssyy,解决方案起名fangan,注意解决方案包括项目,此时生成的最外层目录为fangan代表整个解决方案的内容都在这个文件夹内。在这个fangan文件夹内包含有fangan.sln的解决方案配置文件和一个ssyy转载 2015-11-29 13:34:16 · 2799 阅读 · 0 评论 -
“error LNK2019: 无法解析的外部符号”之分析
“error LNK2019: 无法解析的外部符号”之分析最近在用VS 2008开发,初学遇到不少问题,最头疼的问题之一就是:LNK2019。百度一下讲的并不够全面,反正都没解决我的问题。error LNK2019问题在VC 6.0中是error LNK2001: unresolved external symbol问题,可能错误号改了。编译时出现类似这样的错误:D转载 2016-07-26 09:33:25 · 2202 阅读 · 1 评论 -
C/C++函数名称修饰规则及extern "C"的作用(函数名压扎)
一、函数名称修饰规则函数的名字修饰(Decorated Name)就是编译器在编译期间创建的一个字符串,用来指明函数的定义或原型。LINK程序或其他工具有时需要指定函数的名字修饰来定位函数的正确位置。由于c语言不支持函数重载,而c++语言支持函数重载,所以c和c++的函数名称修饰规则是不相同的。 以下面这个Add函数为例,来探讨一下c和c++语言的函数名称修饰规则。转载 2016-08-02 11:27:18 · 1194 阅读 · 0 评论 -
c++中引用与java中引用区别
综述: 在Java中,类实例声明和构造是分开。"T a;"是声明,而"a=new T();"才是构造。引用声明和C++相同。但是Java的机制与C++不同,Java中的引用也叫句柄,或者说句柄才是其真实名称。类声明的都是一个句柄,调用构造函数才会使得句柄指向类实例。因此Java中没有类似于C++中的复制函数,因为Java的复制都是直接复制句柄内容。例如"T b=a;"只不过是将a的句柄复转载 2016-08-07 17:41:19 · 1025 阅读 · 4 评论 -
C++:拷贝构造函数在什么时候被调用?
1、对象在创建时使用其他的对象初始化Person p(q); //此时复制构造函数被用来创建实例pPerson p = q; //此时复制构造函数被用来在定义实例p时初始化p2、对象作为函数的参数进行值传递时f(p); //此时p作为函数的参数进行值传递,p入栈时会调用复制构造函数创建一个局部对象,与函数内的局部变量具有相同的作用域需要注意的是,赋值并不会调用复制构造函数,赋值转载 2016-08-07 21:44:57 · 3225 阅读 · 1 评论 -
C++中protected的访问权限
转载,释然读C++ Primer 心中疑惑: http://www.cnblogs.com/harlentan/archive/2011/03/05/2006444.html关于C++中protected的访问权限的讨论已经是一个很陈旧的话题了,陈旧到大家都不愿意去讨论,觉得他见到到吃饭睡觉那么自然。我再次读《C++ Primer》的时候,其中关于protected 成员的描述是这样的转载 2016-08-08 19:26:45 · 606 阅读 · 0 评论 -
sizeof与strlen的区别
1、编译时计算运算符sizeof,可用类型或变量做参数,计算占用内存的大小。sizeof后若是类型必须加括弧,若是变量名可不加括弧。sizeof(x)可用来定义数组维数如:复制代码 代码如下:printf("%d\n", sizeof(short)); 输出的结果为短整型的长度2。用结构类型或变量做参数时,sizeof 返回实际的大小,当用于静态数组时,sizeof 返回转载 2015-12-05 10:34:34 · 292 阅读 · 0 评论 -
减法变加法-计算机中的补码表示
原码就是原来的表示方法反码是除符号位(最高位)外取反补码=反码+1以前学习二进制编码时,老师讲了一堆堆的什么原码啊反码啊补码啊xxxx转换啊,还有负数的表示方式啊 总是记不零清,终于从网上找到了一种比较好的讲解方式,保存再share一下,不过为了系统化讲解,又找来了一些编码的基础知识,如果只想看负数编码记忆法,请跳转到1.如果你不知道二进制怎么编码,请继续,否则请跳到2转载 2015-12-22 15:04:05 · 1182 阅读 · 0 评论 -
C语言中定义变量(储存区 栈)和用malloc(动态分配 堆)的区别
一.变量: 不管全局变量还是局部变量都是系统自动分配管理的,全局变量如果不人工初始化时系统自动初始化;对于静态局部变量,编译时自动赋初始值(数值型初始化为0,字符型初始化为'\0',指针初始化为NULL(这里我们知道Java中我们一般常见NULL,因为我们定义的对象变量其实是个引用,引用其实就是指针,String也是指针char []=String)),自动局部变量不初始化他的值是不确定的原创 2015-12-21 13:11:45 · 5563 阅读 · 0 评论 -
C语言中产生随机数
C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,C语言/C++里没有自带的random(int number)函数。(1) 如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间。RAND_MAX定义在stdlib.h, 其值为2147483647。例如:[cpp] v转载 2015-11-18 13:34:17 · 1722 阅读 · 0 评论 -
如何用c语言产生一定范围内的随机数?
srand((int)time(NULL));设定随机数种子rand()%100;产生0-99的随机数。高级点的,假如要产生16-59之间的数,你可以这样写:rand()%44+16(这里44由59-16+1得到)。其他情况如法炮制!下面是搜回来的:问题1: 怎样获得一个真正的随机数?要知道,rand()是不能产生真正的随机数的!即使不能产生真正的随机数,也要大概接近呀!而rand()好转载 2015-11-18 14:02:09 · 19782 阅读 · 0 评论 -
Visual Studio 写自己的动态链接库(DLL)
有些时候,我们想写自己的函数库以避免重复写代码,此文介绍如何使用Visual Studio编写自己的动态链接库。0,实验环境说明: 集成开发环境:Visual Studio 10.0 操作系统: Windows 7 语言:C/C++1,编写自己的DLL 我们分两部分介绍如何完成编写自己的DLL。1.1,环境搭建 介绍如何使用Visual转载 2015-11-17 22:53:32 · 1064 阅读 · 0 评论 -
关于C语言中的未初始化变量的值
我们在刚学C编程的时候经常碰到“烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫烫”,这是为什么呢?先从上次某公司笔试说起,当时有一题是考到了关于变量初始化的问题。在主函数外面(全局)和里面(局部)个定义一个int类型数值。然后没有赋值,直接打印出来,问输出什么。那会只知道全局默认是0,局部是一个负的挺大的数,还以为是最小整数。回来后试了下,局部的int默认的是-858993460,即0转载 2015-11-25 16:41:33 · 934 阅读 · 0 评论 -
静态区和栈区和堆区
静态区:保存自动全局变量和static变量(包括static全局和局部变量)。静态区的内容在总个程序的生命周期内都存在,由编译器在编译的时候分配。堆:由malloc系列函数或new操作符分配的内存,其生命周期由free或delete决定。在没有释放之前一直存在,直到程序结束,其特点是使用灵活,空间比较大,但容易出错栈:保存局部变量,栈上的内容只在函数的范围内存在,当函数运行结束,这转载 2015-11-25 16:50:13 · 681 阅读 · 0 评论 -
二叉树建立出现的指针问题
#include #include struct BiTNode { char data; struct BiTNode* lchild; //二叉树的结构 struct BiTNode* rchild; }; typedef struct BiTNode * BiTree ; void CreatBi转载 2015-11-25 18:21:38 · 636 阅读 · 0 评论 -
c语言中exit的简单用法
exit()就是退出,传入的参数是程序退出时的状态码。0表示正常退出,其他表示非正常退出,一般都用-1或者1,exit(1);//跟return(1)一样效果;标准C里有EXIT_SUCCESS和EXIT_FAILURE两个宏,用exit(EXIT_SUCCESS),可读性比较好一点。使用exit()时,可以不论main()的返回值类型。它的头文件是 stdlib.h。转载 2015-11-27 17:57:31 · 2613 阅读 · 0 评论 -
FileTool.exe 替换 Visual C++ 的"打开"和"添加到项目中"的功能
在Windows7中使用vc++6.0集成开发环境的时候,当打开文件操作或者添加文件操作的时候vc会出错停止运行,今天看了一个视频上面演示了解决办法,地址:http://v.youku.com/v_show/id_XNDEyMzcwNzQ0.html。其中微软提出了一个解决方案:FileTool.exe,微软官方下载地址和设置方法:http://support2.microsoft.com/kb/转载 2015-11-27 21:42:00 · 1204 阅读 · 0 评论 -
多维数组的表示
就是数组中嵌套数组,形式为int [][][][] arr = new int [4][3][2][1];其中,arr变量中存放的是长度为4的那个数组的首地址值,而一维数组部分中存的是各个二维数组部分的首地址值,二维数组部分中存的是各个一维数组部分的首地址值,真正有存数据的是第四维数组部分中。因此这个数组最大可存储4*3*2*1=24个数据。当然我这里是为了简便才写成这种的,多维数组并不是标准转载 2015-11-24 20:09:59 · 2025 阅读 · 0 评论 -
Java与c/c++运行时的不同
Java编译原理1、Java编译过程与c/c++编译过程不同Java编译程序将java源程序编译成jvm可执行代码--java字节码.c/c++编译过程:当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而生成的。因此在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译过程:Java编译器却不将对变量和方法的转载 2015-12-01 18:38:10 · 628 阅读 · 0 评论 -
编译时提示 无法打开包括文件:“fstream.h”
刚刚在VS2008里面使用vc6.0的那种#include方式,但是编译时提示fatal errorC1083: 无法打开包括文件:“fstream.h”: No such file or directory。查阅了相关资料后,找到解决方法: 把#include 改成#include using namespace std;转载 2015-12-02 17:00:30 · 21608 阅读 · 1 评论 -
C/C++程序从编译到最终生成可执行文件的过程分析
一.上一节我们介绍了编程语言的种类,其中包括机器语言、汇编语言和高级语言。 电子计算机所使用的是由“0”和“1”组成的二进制数,二进制是计算机的语言的基础。计算机发明之初,人们只能降贵纡尊,用计算机的语言去命令计算机干这干那,一句话,就是写出一串串由“0”和“1”组成的指令序列交由计算机执行,这种语言,就是机器语言。想象一下老前辈们在打孔机面前数着一个一个孔的情景,嘘,小声点,你的转载 2015-12-01 19:28:46 · 647 阅读 · 0 评论 -
编译性语言、解释性语言和脚本语言
计算机不能直接理解高级语言,只能理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。(计算机只能执行机器语言:我们要执行高级语言编的代码,就只能用编译器把它变成机器语言)2.翻译有两种方式:a.编译b.解释。两种方式主要是翻译的时间不同3.编译语言:编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成机器语言文件;比如,exe文件,以后运行的话就转载 2016-01-05 16:19:54 · 979 阅读 · 0 评论 -
C语言函数不能返回局部变量的地址
在C中,正常情况下,我们只能从函数中返回一个值。但在很多情况下,我们需要从函数中返回多个值,此时使用数组或指针能够很好地完成这样的任务。这里是一个示例。这个程序使用一个整型数组作为参数,并将数组元素的和与积返回给调用函数。下面是C代码,这是一种常见情况。下面给出实现技巧:#include stdio.h> #include conio.h> int* Pool(int arra转载 2015-12-21 12:44:28 · 4853 阅读 · 0 评论 -
c++与java中函数重载区别与相同点
1. 先说两者的不同点java的函数重载是(两同一不同)即同一个类中方法名相同,参数列表不相同(返回值的类型与修饰符与函数重载无关)c++的函数重载是可以使全局函数不在同一个类中方法名相同但是参数列表不相同2.相同点两者如果函数名相同参数列表相同但是返回的类型不相同就不是函数重载了c++void func(int a);char func(int a);这样不行原创 2016-08-02 09:44:08 · 1554 阅读 · 0 评论