知识点
veryday_code
这个作者很懒,什么都没留下…
展开
-
内存对齐
struct A { char b; int a; short c; };sizeof(A)=1+3+4+2+2=12; 3、2 为编译器自动填充,填3是为了数据成员对齐,填2是为了结构体本身对齐。struct A { short c; char b; int a; };sizeof(A)=2+1原创 2012-07-19 17:03:32 · 183 阅读 · 0 评论 -
数组取址 和 ptr[-1]
int a[5]={1,2,3,4,5};// 数组a的内存布局(16进制):01000000 02000000 03000000 04000000 05000000int *ptr1=(int *)(&a+1);// a本身就为一个数组的地址,其值=&a[0],即数组第一个元素的地址,对a再取址// &a = a,似乎没什么不同,其实这里发生了对齐变更,a+1的对齐是以int转载 2012-09-03 13:06:53 · 408 阅读 · 0 评论 -
n&n-1 n&-n
n&n-1 清除n最右边的1n&-n取得n最右边的1原创 2012-08-20 22:28:28 · 2774 阅读 · 0 评论 -
关于空类 含有虚函数类 占有空间大小
http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=3757411原创 2012-08-19 21:59:02 · 1327 阅读 · 0 评论 -
strcpy、sprintf、memcpy的区别
1、char *strcpy(char *des, char *src); 其操作对象是字符串,完成从源字符串到目的字符串的拷贝。2、int sprintf(char *buffer, const char *format, ...); 其操作对象不限于字符串,源对象可以是其他基本数据类型变量。 这个函数可以用来实现非字符串的基本数据转载 2012-08-19 21:36:19 · 528 阅读 · 0 评论 -
判断程序是有C编译器编译 还是由c++编译器编译
#ifdef __cpluspluscout#elsecout#endif原创 2012-08-19 16:35:08 · 501 阅读 · 0 评论 -
一关于引用的面试题
string foo( );void bar(string & s);那么下面的表达式将是非法的:bar(foo( ));bar("hello world");原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。转载 2012-08-19 14:36:59 · 282 阅读 · 0 评论 -
BOOL,int,float,指针类型的变量a 与“零”的比较语句
BOOL : if ( !a ) or if(a)int : if ( a == 0)float: if ( a 0.000001&& a >-0.000001)pointer : if ( a != NULL) or if(a == NULL)原创 2012-08-19 16:17:33 · 630 阅读 · 0 评论 -
a A 的ascii码的十进制 十六进制得记住啊
a 十进制 97 十六进制 61A 十进制 65 十六进制 41原创 2012-08-19 15:04:24 · 4672 阅读 · 0 评论 -
const在c/c++中的区别
C++中的const正常情况下是看成编译期的常量,编译器并不为const分配空间,只是在编译的时候将期值保存在名字表中,并在适当的时候折合在代码中.所以,以下代码:#include using namespace std;int main(){ const int a = 1; const int b = 2; int array[ a + b ] = {0}; f转载 2012-08-01 09:56:48 · 650 阅读 · 0 评论 -
交换函数几种写法
void swap(int *a,int *b){int temp;temp=*a;*a=*b;*b=temp;}void swap(int *a,int *b){*a=*a+*b;*b=*a-*b;*a=*a-*b;}//这样写 不严谨 可能产生溢出void swap(int *a,int *b){//这样 也不严谨 如果 两个数相等 异或之后会是0 *原创 2012-07-22 17:32:30 · 400 阅读 · 0 评论 -
判断大端小端
int checkCPU( ){ { union w { int a; char b; } c; c.a = 1; return(c.b ==1); }} int i = 1原创 2012-07-25 00:06:27 · 846 阅读 · 0 评论 -
C语言中如何使用宏 包括单双井号 可变参数
C(和C++)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念)。下面对常遇到的宏的使用问题做了简单总结。关于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏:#define WARN_IF(EXP) /转载 2012-08-08 21:18:37 · 2369 阅读 · 0 评论 -
浮点类型和0比较
浮点型数据直接和0用>=,float的精度是6位,即精确到小数点后第五位,所以应该使用其精确位0.00001;同理双精度小数其精度为15位,精确到小数点后第14位。float型数据与0的比较 if(x>-0.00001&&x原创 2012-08-04 15:37:53 · 783 阅读 · 0 评论 -
内存对齐的规则以及作用
首先由一个程序引入话题: 1 //环境:vc6 + windows sp2 2 //程序1 3 #include 4 5 using namespace std; 6 7 struct st1 8 { 9 char a ;10 int b ;11 short c ;12 };13 14 struct st转载 2012-07-19 17:10:47 · 241 阅读 · 0 评论 -
什么时候调用拷贝构造函数
以下几种情况会调用拷贝构造函数1. 以一个对象初始化另一个对象2. 函数以某个对象为参数3. 函数返回某个对象4. 初始化序列式容器的元素[cpp] view plaincopy#include #include using namespace std; class tes原创 2012-09-15 20:31:52 · 1923 阅读 · 0 评论