易截截图软件、单文件、免安装、纯绿色、仅160KB

c,c++内存运行时深入研究

(一)整数符号的陷阱 
(二)浮点数的本质 
(三)堆栈的内存管理结构 
(四)符号解析 
(五)对齐和总线错误 
(六)函数指针 
(七)虚函数的实现机理 
(八)引用的实现机理 
(九)虚拟继承对象的内存结构 
(十)混合编程时的初始化顺序 
(十一)数组和指针的异同 
(十二)const限定的传递性 
(十三)数据类型的限定性检查 
(十四)使用STL时的类型限制 
(十五)迭代器自身的类型 
(十六)运行时的类型信息 
(十七)new/delete重载 
(十八)如何拷贝一个文件 
(一)整数符号的陷阱 
        x
#include
int main(void){ 
int x=1; 
unsigned int y=2; 
int b=x
int b2=(x-y<0); 
printf("%d,%d ",b,b2); 
return 0; 

它输出什么呢? 
1,0 
    令人震惊,不是吗,x
(1)x
(2)x-y的结果计算的时候,返回一个0xfffffffe,它被当成无符号数字理解并和0比较,显然<0不成立,返回0。 
总结一下,整数的运算,加减乘的时候,根本不管是否声明为是否有符号,在2进制cpu上面的计算是相同的,但是比较的时候(<,>,==)会根据类型,调用不同的比较指令,也就是以不同的方式来理解这个2进制结果。当signed和unsigned混用的时候,全部自动提升为无符号整数。 
#include
int main(void){ 
int i=-2; 
  unsigned j=1; 
if(j+i>1) //提升为两个uint相加
    printf("sum=%d ",j+i);//打印的结果根据%d制定,j+i的内存值永远不变。
return 0; 

输出 
> ./a.out
sum=-1 
再举一个例子 
#include
int main(void){ 
int i=-4; 
unsigned int j=1; 
int ii=i+j; 
unsigned int jj=i+j; 
printf("%d,%ud ",ii,jj); 
if(ii>1){printf("100000");} 
if(jj>1){printf("100001");} 
return 0; 

用gcc -S得到汇编,会发现if(ii>1)和if(jj>1)对应两个不同的跳转指令jle和jbe。 
总结: int和unit在做比较操作和除法的时候不同,其他情况相同。 
返回页首 
(二)浮点数的本质 
&n


相关文档:

extern及extern “C”用法

extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字创意产品网 .
它告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。
1。对于extern变量来说,仅仅是一个变量的声明,其并不是在定义分配内存空间。如果该变量定义多次,会有连接错误
2。通常,在模块的头文件中对本模块提供给其它模块 ......

linux 常用c函数


opendir(打开目录)
相关函数
open,readdir,closedir,rewinddir,seekdir,telldir,scandir
表头文件
#include<sys/types.h>
#include<dirent.h>
定义函数
DIR * opendir(const char * name);
函数说明
opendir()用来打开参数name指定的目录,并返回DIR*形态的目录流,和open()类似,接下 ......

C/C++ static和可重入概念

static
C++中的static
  C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用。
  一、面向过程设计中的static
  1、静态全局变量
  在全局变量前,加上关键字static,该变量就被定义成为一个静态全局变 ......

C 基础

递归链表反序
void Invert(struct node *p)
{
     if(p->next==NULL) return;
     if(p->next->next!=0)
          Invert(p->next);
    p->next->next = p;
    p-> ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号