2013年4月17日

摘要: 一、定义 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际上,为了减少CPU读取内存的此时,在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。————————————————————————————————————————————————————————————二、原理解释 下面这段转载自:http://www.cnblogs.com/wuzhenbo/archive/2012/06/05/2537465.html 在IBM开发社区... 阅读全文
posted @ 2013-04-17 11:50 江在路上 阅读(179) 评论(0) 推荐(0) 编辑

2013年4月16日

摘要: 1、先来看一个例子:#include "stdio.h" int main(int argc, char* argv[]) { int i = 0; printf("%d, %d\n", ++i , ++i); return 0; } //vc编译输出 2,1//xcode使用的编译器输出 1,2这还是跟编译器的默认调用约定有关,vc编译器的默认调用约定的函数参数压栈顺序是从右向左的,所以先计算最右边的++i;xcode使用的编译器则相反。2、继续例子#include "stdio.h" int f(){ printf("f 阅读全文
posted @ 2013-04-16 22:52 江在路上 阅读(215) 评论(0) 推荐(0) 编辑
 
摘要: 一、函数原型的格式如下:[作用域][函数的链接规范]返回值类型[函数的调用规范]函数名(类型1[形参名],类型2[形参名],...)函数的参数压栈顺序与其中的 函数的调用规范 有关系,函数的调用规范就是描述参数是怎么传递的和由谁平衡堆栈的,当然还有返回值。编译出来的c/c++程式的参数压栈顺序只和编译器相关!二、函数调用约定的几种类型__stdcall,__cdecl,__fastcall,__thiscall,__nakedcall,__pascal三、函数调用约定的主要约束事件(1)、参数传递顺序1.从右到左依次入栈:__stdcall,__cdecl,__thiscall2.从左到右依次 阅读全文
posted @ 2013-04-16 21:54 江在路上 阅读(2629) 评论(0) 推荐(0) 编辑
 
摘要: 一、什么是可变参数 我们在C语言编程中有时会遇到一些参数个数可变的函数,例如printf()函数,其函数原型为:int printf( const char* format, ...);它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的(用三个点“…”做参数占位符),实际调用时可以有以下的形式: printf("%d",i);printf("%s",s);printf("the number is %d ,string is:%s", i, s); 以上这些东西已为大家所熟悉。但是究竟如何写可变参数的C函数呢?二、 阅读全文
posted @ 2013-04-16 20:33 江在路上 阅读(168) 评论(0) 推荐(0) 编辑
 
摘要: 1、定义1) Little-Endian就是低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。2) Big-Endian就是高位字节排放在内存的低地址端,低位字节排放在内存的高地址端。例如:(1)16bit宽的数0x1234在Little-endian模式CPU内存中的存放方式(假设从地址0x4000开始存放)为:内存地址0x40000x4001存放内容0x340x12而在Big-endian模式CPU内存中的存放方式则为:内存地址0x40000x4001存放内容0x120x34(2)32bit宽的数0x12345678在Little-endian模式CPU内存中的存放方式(假设从地 阅读全文
posted @ 2013-04-16 14:38 江在路上 阅读(208) 评论(0) 推荐(0) 编辑

2013年4月13日

摘要: 可用如sizeof(char),sizeof(char*)等得出32位编译器:char :1个字节char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也就是4个字节。同理64位编译器)short int : 2个字节int: 4个字节unsigned int : 4个字节float: 4个字节double: 8个字节long: 4个字节long long: 8个字节unsigned long: 4个字节64位编译器:char :1个字节char*(即指针变量): 8个字节short int : 2个字节int: 4个字节unsigned int : 4个字节fl 阅读全文
posted @ 2013-04-13 22:50 江在路上 阅读(166) 评论(0) 推荐(0) 编辑
 
摘要: 转载自:http://blog.csdn.net/zhuimengzh/article/details/6728492#1、隐式转换C在以下四种情况下会进行隐式转换: 1、算术运算式中,低类型能够转换为高类型。2、赋值表达式中,右边表达式的值自动隐式转换为左边变量的类型,并赋值给他。3、函数调用中参数传递时,系统隐式地将实参转换为形参的类型后,赋给形参。4、函数有返回值时,系统将隐式地将返回表达式类型转换为返回值类型,赋值给调用函数。2、算数运算的隐式转换 算数运算中,首先有如下类型转换规则: 1、字符必须先转换为整数(C语言规定字符类型数据和整型数据之间可以通用)。 2、short型转换为i 阅读全文
posted @ 2013-04-13 22:45 江在路上 阅读(368) 评论(0) 推荐(0) 编辑
 
摘要: #include <stdio.h>int main(){ short a=-1; unsigned int b=a; int c=a; printf("%x\n", b); printf("%d\n", c); a=1; b=a; c=a; printf("%x\n", b); printf("%d\n", c); return 0;}输出为:ffffffff-111说明,把short型数据赋值给int或者unsigned int型数据时,如果short型数据是负的,则扩展的比特位全是1,;如果sho 阅读全文
posted @ 2013-04-13 22:20 江在路上 阅读(1699) 评论(0) 推荐(0) 编辑
 
摘要: 整型的每一种都有无符号(unsigned)和有符号(signed)两种类型(float和double总是带符号的),在默认 情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的正整数数据,比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。同时在相同位数的情况下,所... 阅读全文
posted @ 2013-04-13 21:26 江在路上 阅读(259) 评论(0) 推荐(0) 编辑

2013年4月10日

摘要: #include <iostream> using namespace std; class Base1 { public: virtual void f() { cout << "Base1::f" << endl; } virtual void g() { cout << "Base1::g" << endl; } virtual void h() { cout << "Base1::h" << endl; } }; class Base2 { p 阅读全文
posted @ 2013-04-10 22:50 江在路上 阅读(129) 评论(0) 推荐(0) 编辑