
C++重要知识点
WeiKangC
积累,沉淀!
展开
-
结构体字节对齐
结构体字节对齐 在用sizeof运算符求算某结构体所占空间时,并不是简单地将结构体中所有元素各自占的空间相加,这里涉及到内存字节对齐的问题。从理论上讲,对于任何 变量的访问都可以从任何地址开始访问,但是事实上不是如此,实际上访问特定类型的变量只能在特定的地址访问,这就需要各个变量在空间上按一定的规则排列, 而不是简单地顺序排列,这就是内存对齐。 计算结构变量的大小转载 2015-11-10 17:03:12 · 275 阅读 · 0 评论 -
static深入详细解释
面试题:static有什么作用?答:在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数 一、 定义全局静态变量 :在全局变量前面加上关键字static,该全局变量变成了全局静态变量。全局静态变量有以下特点:(1) 在全局数据区内分配内存(2) 如果没有初始化,其默认值为0(3) 该变量转载 2015-11-11 11:44:10 · 406 阅读 · 0 评论 -
C++重点知识(精华篇)
来源:http://www.cnblogs.com/lzjsky/archive/2011/01/18/1938507.html2. 什么是“引用”?申明和使用“引用”要注意哪些问题? 答:引用就是某个目标变量的“别名”(alias),对引用的操作与对变量直接操作效果完全相同。申明一个引用的时候,切记要对其进行初始化。引用声明完 毕后,相当于目标变量名有两个名称,即该目标原名转载 2015-11-11 14:23:13 · 1184 阅读 · 0 评论 -
memmove,memcpy函数详解
写一个函数,完成内存之间的拷贝void* mymemcpy( void *dest, const void *src, size_t count ) { char* pdest = static_castchar*>( dest ); const char* psrc = static_castconst char*>( src );转载 2015-11-11 14:36:08 · 1207 阅读 · 0 评论 -
strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数
strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数strcpy函数:char *strcpy(char *Dest , const char *Src) { assert((Dest != NULL) && (Src != NULL)); char *address = Dest; wh转载 2015-11-11 14:37:54 · 519 阅读 · 0 评论 -
static用法详解(精华篇)
static用法详解一. 面向过程程序设计1、静态全局变量 在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变量。我们先举一个静态全局变量的例子,如下: //Example 1 #include void fn(); static int n; //定义静态全局变量 void main()转载 2015-11-11 14:43:44 · 562 阅读 · 0 评论 -
内存泄露概述
内存泄露 1.简介 在计算机科学中,内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏与许多其他问题有着相似的症状,并且通常情况下只能由那些可以获得程序源代码的程序员才可以分析出来。然而,有不少人习转载 2015-11-11 10:49:24 · 736 阅读 · 0 评论 -
strcpy函数详解及strcpy与strncpy比较
1 #include 2 #include 5 void myStrcpy(char* Dest, const char *Src) 6 { 7 assert((Dest!= NULL)&&(Src!=NULL)); 8 while((*Dest = *Src)!='\0') 9 {10 Dest++;11 Src++转载 2015-11-11 14:33:33 · 1113 阅读 · 0 评论 -
结构体、共用体简单比较
结构体、共用体 1 #include 2 union 3 { 4 int i; 5 char x[2]; 6 }a; 7 8 void main() 9 { 10 a.x[0] = 10; 11 a.x[1] = 1; 12 printf("%d",a.i); 13 } 14 答案:266 15 16转载 2015-11-11 14:39:59 · 529 阅读 · 0 评论 -
浅淡数组和指针
谢谢大牛的分享,看完后让我对数组与指针有了更深刻的理解,在此谢过!转载:http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242138.html http://www.cnblogs.com/dolphin0520/archive/2011/11/09/2242419.html转载 2015-11-11 15:36:08 · 410 阅读 · 0 评论 -
浅淡C/C++中的typedef和#define
在C/C++中,我们平时写程序可能经常会用到typedef关键字和#define宏 定义命令,在某些情况下使用它们会达到相同的效果,但是它们是有实质性的区别,一个是C/C++的关键字,一个是C/C++的宏定义命令,typedef 用来为一个已有的数据类型起一个别名,而#define是用来定义一个宏定义常量。下面谈谈两者在实际使用中应当注意的地方。1.typedef关键字 typ转载 2015-11-11 15:58:00 · 430 阅读 · 0 评论 -
sizeof和strlen的区别
sizeof和strlen的区别第一个例子: char *ss="0123456789"; sizeof(ss)=4, ss是指向字符串常量的字符指针。 sizeof(*ss)=1, *ss是第一个字符。第二个例子: char ss[]="0123456789"; sizeof(ss)=11, ss是数组,计算到“\0”位置,因此是(10+1)。转载 2015-11-10 17:16:09 · 320 阅读 · 0 评论 -
qsort(),sort()排序函数
一.qsort()函数功 能: 使用快速排序例程进行排序头文件:stdlib.h用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));参数: 1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函转载 2015-11-10 14:25:02 · 482 阅读 · 0 评论 -
C++中成员以其在类中声明的顺序构造
分析以下代码的输出: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include<iostream> usingnamespacestd; ...原创 2019-07-25 15:11:30 · 668 阅读 · 0 评论 -
C++中指针和引用的区别(超详细)
指针和引用主要有以下区别:引用必须被初始化,但是不分配存储空间。指针不声明时初始化,在初始化的时候需要分配存储空间。引用初始化后不能被改变,指针可以改变所指的对象。不存在指向空值的引用,但是存在指向空值的指针。注意:引用作为函数参数时,会引发一定的问题,因为让引用作参数,目的就是想改变这个引用所指向地址的内容,而函数调用时传入的是实参,看不出函数的参数是正常变量,还是引转载 2015-11-10 17:40:31 · 67328 阅读 · 18 评论 -
C++中成员以其在类中声明的顺序构造
分析以下代码的输出:12345678910111213141516171819#includeusing namespace std; class A{public原创 2015-11-10 13:56:40 · 1346 阅读 · 0 评论 -
memset,memcpy,strcpy函数使用方法
将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。需要的头文件在C中 在C++中 C++98标准哈 1. void *memset(void *s,int c,size_t n)总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。原创 2015-11-10 14:00:44 · 753 阅读 · 0 评论 -
C++经典功能特性之运算符重载
运算符重载 C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重转载 2015-11-10 14:52:43 · 524 阅读 · 0 评论 -
malloc和new有什么区别
malloc和new有以下不同:new、delete是操作符,可以重载,只能在c++中使用。malloc、free是函数,可以覆盖,c、c++中都可以使用。new可以调用对象的构造函数,对应的delete调用相应的析构函数。malloc仅仅负责分配内存,free仅仅回收内存,并不执行构造和析构函数。new、delete返回的是某种数据类型指针,malloc、free返回的是void指针。转载 2015-11-10 17:24:09 · 574 阅读 · 0 评论 -
c++程序的内存格局
c++程序的内存格局通常分为四个区:全局数据区;代码区;栈区;堆区(即自由存储区)。 全局变量、静态数据、常量存放在全局数据区,所有类成员函数和非成员函数代码存放在代码区,为运行函数而分配的局部变量、函数参数、返回地址等存放在栈区,余下的空间都被称为堆区。 new和delete,malloc和free,都从堆中分配和释放内存块,但在具体操作上两者有很大的区转载 2015-11-10 17:27:30 · 396 阅读 · 0 评论 -
C++语言中四大转换算子static_cast ,const_cast,reinterpret_cast,dynamic_cast
用法:static_cast ( expression )该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动转载 2015-11-10 14:34:31 · 594 阅读 · 0 评论 -
C/C++ 语言中的表达式求值(底层次的理解)
在此,首先向裘老师致敬!裘宗燕:C/C++ 语言中的表达式求值经常可以在一些讨论组里看到下面的提问:“谁知道下面C语句给n赋什么值?”m = 1; n = m+++m++;最近有位不相识的朋友发email给我,问为什么在某个C++系统里,下面表达式打印出两个4,而不是4和5:a = 4; cout C++ 不是规定 注:运行a = 4; cout转载 2015-11-10 15:01:16 · 610 阅读 · 0 评论 -
C++内存管理学习堆和栈
来源:http://c.chinaitlab.com/basic/936306_2.html 一 C++内存管理1.内存分配方式 在讲解内存分配之前,首先,要了解程序在内存中都有什么区域,然后再详细分析各种分配方式。 1.1 C语言和C++内存分配区 下面的三张图,图1图2是一种比较详细的C语言的内存区域分法。图3是典型的C++内存分布图,简单转载 2015-11-10 17:38:17 · 385 阅读 · 0 评论 -
C++类的静态成员详细讲解
C++类的静态成员详细讲解在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用。所以在所有对象中都可以共享它。使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节省内存。静态成员的定义或声明要加个关键static。静态成员可以通过双冒号来使用即::。 在C++中类的静态成员变量和静态成员函数是个容易出错的地方,本文转载 2015-11-11 16:32:23 · 360 阅读 · 0 评论