C/C++基础
文章平均质量分 63
firefly_2002
这个作者很懒,什么都没留下…
展开
-
warning C4819: The file contains a character that cannot be represented in the current code page
编译VC++程序的时候出现如下提示警告:warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss因为只是一个warning,不影转载 2013-01-19 16:02:59 · 920 阅读 · 0 评论 -
什么情况下,类的析构函数应该声明为虚函数?
析构函数的用法:1.每个析构函数(不加 virtual) 只负责清除自己的成员。2.可能有基类指针,指向的确是派生类成员的情况。对于第二种情况:正确执行:基类指针可以指向派生类的对象(多态性),如果删除该指针delete []p;就会调用该指针指向的派生类析构函数,而派生类的析构函数又自动调用基类的析构函数,这样整个派生类的对象完全被释放。如果析构函数不被声明成虚函数,则编译器实施静态原创 2012-10-25 12:05:04 · 3799 阅读 · 0 评论 -
关于文件写入
当两个指针指向同一个文件,分别进行写入时,第二个指针写入的数据会覆盖第一个指针写入的数据例: FILE *fptr1, *fptr2, *fptr3; //定义三个文件指针fptr1=fopen("file1.c", "w"); //对文件进行写操作,建立指针与文件的联系,指针指向文件首地址fptr2=fopen("file1.c", "w");//f原创 2012-10-25 09:56:24 · 635 阅读 · 0 评论 -
指针的引用 C++代码简单实例
int main(){ int a = 1; int *b = &a; int * &p = b;//p是 b指针的引用,其用法与b的完全一样 int &C = a;//c是a的引用, C=1c++;// a = 2cout (*b)++; //b指向a, a = 3; cout (*p)++;//其用法与b的完全一样, a = 4; cout原创 2012-10-24 18:59:18 · 516 阅读 · 0 评论 -
静态存储区 存储时地址由低向高
静态存储区 存储时地址由低向高union Ux{int a;char ch[2];}x; //空间大小为int 的4,即00000000 00000000 00000000 00000000, 该变量为全局变量,存在静态存储区int main(){x.ch[0] = 1;// 先存低位00000000 00000000 00000000 00000001原创 2012-10-24 21:35:59 · 1959 阅读 · 0 评论 -
函数指针
int fun1() { return 0;} int fun2() { return 0; } int main() { int (*p)() = fun1; //函数指针 p = fun2; return 0; }原创 2012-10-24 20:11:18 · 502 阅读 · 0 评论 -
p,&p,*p的区别
一、区别 int z=0; int &x = z;//引用,x与z指向同一内存单元 int *y; y = &x;//0x0012ff14 p本身所占内存单元的地址 cout 下面是摘抄别人的一段测试程序。void test(){ int a=8; int *p=&a; p=(int *)malloc(转载 2012-09-29 10:47:43 · 19191 阅读 · 3 评论 -
error C2105: '++' needs l-value 数组名自增时遇到
如下, k 是变量, 它存得是地址, 变量可以作为左值,可以自增。 b是数组名, 数组名是地址, 但此时是作为常量,不可作为左值,不可以自增; 数组名是地址 它不是变量 数组才是变量 int b[]={10,20,30,40,50}; int i, *k; k=&b[4]-4; for (i=0; i { cout //依次输出每一原创 2012-10-24 19:38:01 · 8417 阅读 · 1 评论 -
函数重载时,参数的一种情况
下面两个函数在编译时是一样的void foo(int i);void foo(int &i);//引用, 同上,编译器无法识别void foo(int i){ cout }void foo(int &i){ cout }int main(){ int i=10; foo(i); return 0;}原创 2012-10-24 19:08:38 · 524 阅读 · 0 评论 -
当为指针分配0大小的空间会怎样
P不会是NULLint main(){int *p;//p 默认指向oxcccccccc p = (int *)malloc(0);//P指向ox003960co , 效果同p = (int *)malloc(1)if (p == NULL){cout}else{cout//这步将被执行}return 0;}原创 2012-10-24 13:31:50 · 1620 阅读 · 0 评论 -
DLL文件的作用
一、定义:DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows系统中,从Windows3.x的后续版本起,大部分的系统DLL文件被存放在%SystemPath%Windows\System32文件夹中(systempath为系统安装根路径)目录下。DLL是一个包含可由多个程序同时使用的代码和数据的库。二、作用:一句话,就是把代码编译成分开的文原创 2012-10-31 11:35:03 · 1861 阅读 · 0 评论 -
Windows编程的通信机制
WIN32中进程间的通讯在Windows 95中,为实现进程间平等的数据交换,用户可以有如下几种选择:1. 使用内存映射文件2. 通过共享内存DLL共享内存3. 向另一进程发送WM_COPYDATA消息4. 调用ReadProcessMemory以及WriteProcessMemory函数,用户可以发送由GlobalLock(GMEM_SHARE,...)函数调用提取的原创 2012-10-31 10:26:49 · 962 阅读 · 0 评论 -
using的作用
一、两种运用方式:1.引入命名空间的类库方法,或者命名空间别名;允许在命名空间中使用类型,这样就不必在该命名空间中限定某个类型的使用: 复制代码 using System.Text; 为命名空间或类型创建别名。这称为“using 别名指令”。 复制代码 using Project = PC.MyCompany.Project; 2.资源释放的作用范围:跳出using作用的范原创 2012-10-20 11:05:15 · 4048 阅读 · 0 评论 -
一些容易出错的小地方
一、关于宏 要注意优先级 例: #define Square(a) ((a)*(a)) int a = 5;int b = Square(a++);//b = 25, 但a经过两次自增后,为7,而程序的原意是求a平方后,a自增1,故此处易出错二、关于自增 例: int a, b, c;a = 3;b =原创 2012-10-20 09:44:02 · 877 阅读 · 0 评论 -
堆栈溢出
堆栈溢出就是不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,结果覆盖了老的堆栈数据。 或者解释为 在长字符串中嵌入一段代码,并将过程的返回地址覆盖为这段代码的地址,这样当过程返回时,程序就转而开始执行这段自编的代码了。从物理上讲,堆栈是就是一段连续分配的内存空间。在一个程序中,会声明各种变量。静态全局变量是位于数据段并且在程序开始运行的时候被加载。而程序的动态转载 2012-10-14 16:01:55 · 1118 阅读 · 0 评论 -
static全局变量与普通的全局变量?static局部变量和普通局部变量?static函数与普通函数有什么区别?
问:1.我定义了一个结构体struct student{ char num[15]; char name[20]; int c_language; int math; int english;}stu[3]; 再写一个函数接收这个结构体,比如void intput (struct student a[])现在调用函数input (st转载 2012-10-14 15:48:59 · 697 阅读 · 0 评论 -
虚拟机与虚拟主机 区别
虚拟机是个软件,是用来虚拟各种操作系统的! 你可以在计算机上装个虚拟机,然后在虚拟机上装其他的系统虚拟主机,是在网络服务器上划分出一定的磁盘空间供用户放置站点、应用组件等,提供必要的站点功能与数据存放、传输功能。 是空间 就是我们做网站时候存放网站程序的地方。 虚拟机是个软件用来装操作系统,原创 2012-10-14 20:23:58 · 7987 阅读 · 0 评论 -
c中的printf和c++中的cout有什么区别
printf是一个函数,而cout是一个对象C中的printf是一个标准的输出函数。C++中的cout是在iostrem文件中定义的全局对象 联系:完成的功能一样,都是输出 区别:1.书写格式不一样eg: int a=6; coutprintf("%d\n",a)2.printf需要你告诉它格式(int %d, double %f,char %c)原创 2012-10-14 19:33:30 · 11542 阅读 · 0 评论 -
extern "C"的双重含义
一、1. 被extern "C"限定的函数或变量是extern类型的 extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。注意: extern int a; 仅仅是一个变量的声明,其并不是在定义变量a,并未为a分配内存空间。变量a在所有模块中作为一种全局变量只能被定义一次,否则会出现连接原创 2012-10-25 14:36:53 · 745 阅读 · 0 评论 -
如何引用与局部变量同名的全局变量
在C语言中:C语言中无法引用被隐藏的外部作用域对象,因为无法指定具体作用域。在C++中:C++中要引用被隐藏的全局作用域对象,可以在对象的标识符前加上 :: 限定全局作用域。示例:int val = 10;int get_val(){return val;}void test(){int val = 5;.....get_原创 2012-10-25 12:37:02 · 7309 阅读 · 1 评论 -
warning D9035 : option 'Wp64' has been deprecated and will be removed in a future
开始用visual studio.NET 2008,但将vs2005的程序转到2008上,出现了如下warning: Warning 1 Command line warning D9035 : option 'Wp64' has been deprecated and will be removed in a future release cl 原因: vs2008不再建议使用/wp转载 2013-01-23 20:27:42 · 3485 阅读 · 1 评论 -
fflush()函数的作用
fflush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上如下例:#include #define NUM 5main(){void print_msg(char * );print_msg("hello");print_msg("word\n");}转载 2013-01-23 21:16:43 · 1612 阅读 · 0 评论 -
C++内存分配方式 与 Windows内存分配方式
Windows内存分配方式Win32的堆分配函数每一个进程都可以使用堆分配函数创建一个私有的堆──调用进程地址空间的一个或者多个页面。DLL创建的私有堆必定在调用DLL的进程的地址空间内,只能被调用进程访问。HeapCreate用来创建堆;HeapAlloc用来从堆中分配一定数量的空间,HeapAlloc分配的内存是不能移动的;HeapSize可以确定从堆中分配的空间的大小;Hea转载 2012-12-05 15:06:06 · 1645 阅读 · 1 评论 -
主存储器、辅存、缓存与内存、硬盘的关系
存储器在计算机中处于不同的位置,可分为主存储器和辅助存储器。 主存储器或内存:在主机内部,直接与CPU交换信息的存储器。指CPU能够通过指令中的地址码直接访问的存储器,常用于存放处于活动状态的程序和数据(1)在执行期间,程序的数据放在主存储器内,各个存储单元的内容可通过指令随机访问,这样的存储器称为随机存取存储器(RAM)。另一种存储器叫只读存储器(ROM),里面存放一次性写入的程序或原创 2012-12-05 14:43:19 · 17953 阅读 · 3 评论 -
面向对象的三个特征及其优缺点
1、封装 把客观的事物封装成抽象的类;类可以将自身的数据和方法给可信的类或者对象操作,对不可信的进行隐藏信息。2、继承 可以在现有类的基础上无需重写,扩展类的功能. 通过继承创建的新类称之为"子类"、"派生类". 被继承的类称之为"基类"、"父类"、"超类'; 继承实现方式有三种: 1)、 实现继承是使用基转载 2012-12-05 14:51:12 · 3047 阅读 · 0 评论 -
C++中#if #ifdef的作用
就是判断 有没有定义某个宏 定义了做什么什么 最后要endif一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当条件不满足时则编译另一组语句。条件编译命令最常见的形式为://///////#ifdef 标识符程序段1#e转载 2012-12-05 14:06:26 · 1548 阅读 · 0 评论 -
#incllude<file.h>与#include"file.h"
#incllude:在标准路径下查找搜索顺序不同,尖括号搜索系统目录;表示该文件保存在编译器指定的标准头文件存放处。例如,Microsoft Visual C++ 把语言的头文件保存在 \Program File\Microsoft Visual Studio\VC98\Include 文件夹中咯。当Visual C++ 遇到一个时,它自动到该文件夹中查找文件。#include原创 2012-12-05 13:51:21 · 1121 阅读 · 0 评论 -
sizeof求struct各种组合的长度,以及指针,字符数组的长度
首先,各类型长度分别是:short 2long / int 4char 1double 8 以示例说明,如下struct { short a1; short a2; short a3;}A;struct{ short a1; long a2;}B;struct{ long a1; long a2;}C;struct{原创 2012-12-04 16:50:41 · 1653 阅读 · 0 评论 -
运算符的优先级
C语言运算符优先级和结合性优先级 运算符 含义 运算类型 结合性1 ( ) [ ] -> , 圆括号下标运算符指向结构体成员运算符结构体成员运算符 单目 自左向右2 !~++ --(类型关键字)+ -*&sizeof 逻辑非运算符按位取反运算符自增、自尖运算符强制类型转换正、负号运算符转载 2012-12-03 09:45:36 · 656 阅读 · 0 评论 -
volatile变量
volatile变量的意思是易变的,它的主要作用是避免编译器优化,编译器优化是什么意思? 举个例子,为了避免过多的访问内存,编译器会为变量作一个cache,里面会存放上变量的copy, 这样就会提高程序执行效率,而变量如果加了volatile, 那么编译器就不会做这样的优化,每次用到该变量时,都会去内存取一次,从而保证取到的是变量的最新的值。通常下面情况下要用到该变量。 vol转载 2012-11-29 11:59:53 · 665 阅读 · 0 评论 -
const函数 和非const函数
一、有两种const函数:1、const T func(); 表示返回的是const的类型,也即返回的值不能作为左值。2、T func() const; 表示该成员函数不能修改其成员变量的值,即该函数不能改变任何该类的非静态成员的值。例:class A{public: int get_a() const{return a;}private:int a;int b原创 2012-10-28 14:46:47 · 989 阅读 · 0 评论 -
fflush(stdout)作用
清空标准输出缓冲区,刷新输出缓冲区,即将缓冲区的东西输出到屏幕上 如果圆括号里是已写打开的文件的指针,则将输出缓冲区的内容写入该指针指向的文件,否则清除输出缓冲区。这里的stdout是系统定义的标准输出文件指针,默认情况下指屏幕,那就是把缓冲区的内容写到屏幕上。可是从代码中看不出缓冲区会有什么内容,所以它实际上没有起什么作用原创 2012-10-28 15:24:54 · 2625 阅读 · 0 评论 -
简单实例说明类,类对象的大小
类的大小与类对象的大小相同以下面的实例进行说明class FirstClass // 定义一个类{public: FirstClass() { }private:int i; //4float f;//4char c;//1,要进行对齐,最后为4};int main(){int i = sizeof(FirstClass);/原创 2012-10-28 14:38:54 · 564 阅读 · 0 评论 -
关于template的用法
template T eval (T a, T b) {T result;result = ((a>b)?a : b)+1;//返回较大的值,再自增1return (result);}int main () {int i=5, j=6, k;long l=10, m=5, n;k=eval(i,j);//类型设置为int,再自增1n=eval原创 2012-10-28 15:32:15 · 562 阅读 · 0 评论 -
typedef用法小结 以及与define的区别
typedef与 define区别 下面以一段代码进行说明typedef char * Typedef_char;#define Define_Char char* //no semicolon herevoid main(int argc, char *argv[]){ char s[] = "asdf"; const Typedef_char转载 2012-10-27 11:01:07 · 580 阅读 · 0 评论 -
一个关于printf()函数的小程序
#include #include char *str = "char *str = %f; main() {printf(str, 37);}";int main(){float a = 3.0;printf(str, a, str, 37);//printf() 可以有多个参数,但只要保证第一、二个正确,后面的执行情况不清楚,求各位路过的大侠指教printf(s原创 2012-10-26 21:26:35 · 658 阅读 · 0 评论 -
求字符串,字符,或数组的大小
一、sizeof(), sizeof' ' , sizeof" "三种情况 sizeof():括号里面可以是数组名,也可以“abc.....”;sizeof' ':只能是字符,当是一个字符的时候大小为1,二三四个字符时则为4,大于4个字符则编译通不过 sizeof" ":双引号里面是字符串,求出的长度是字符串 + ‘\0’ 的长度,即长度加1二、strlen()原创 2012-10-25 10:28:17 · 2029 阅读 · 0 评论 -
C/C++ 内存分配里的 堆和栈 与数据结构里的 堆和栈
一、简单说 数据结构的堆和栈 与 内存分配里的堆和栈 没有关系。1.数据结构的 堆和栈 只是一种数据结构,侧重的是数据逻辑上的存放,读取,组织方式。用在 排序和OS任务优先级调度2.内存堆和栈 是实实在在的东西,堆可以想象成内存池。 栈作用主要是存放函数调用的参数和该函数分配的空间, 等调用结束, 自动回收这些分配的空间. 堆是由操作系统负责管理的空间, 这块空间完原创 2012-10-14 16:33:16 · 2048 阅读 · 0 评论 -
C++程序的内存格局通常分为哪几个区
五大内存分区 在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有转载 2012-10-14 16:14:40 · 6062 阅读 · 1 评论 -
低耦合和高内聚
原文入下:耦合度一、什么是耦合度软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分摸块的一个准则就是高内聚低耦合。 耦合度(Coupling)是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。 模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越转载 2012-09-09 13:10:57 · 6184 阅读 · 0 评论