摘要:
1、管理方式不同:栈(stack)由编译器管理;堆(heap)由程序员管理。2、空间大小不同:win32中,堆(heap)可达4G;VC中栈默认1M(可以修改)。3、碎片问题:堆(heap)易产生;栈(stack)不会。4、生长方向不同:堆(heap)生长方向是向上的,也就是向着内存增加的方向;栈(stack)相反。5、分配方式不同:堆(heap)是动态的,没有静态的堆;栈(stack)有两种:动态和静态。6、分配效率不同:栈(stack),系统提供底层支持,有专门的寄存器存放栈地址,效率高;堆(heap),由库函数提供支持,效率底。一般认为在c中分为这几个存储区1栈 - 有编译器自动分配释放 阅读全文
摘要:
使用printf打印时发现,如果数据类型和打印使用的类型不一致,结果就是混乱的。这是因为printf本身并不进行数据的类型转换,他只是把输入按照给定的数据格式输出,如果二者不匹配,那么由于不同数据类型的二进制存储方式不一样,读出的数据就是错误的。所以,为求稳妥,在使用printf,fprintf,scanf,fscanf在类型不一致时还是手动转化吧! printf("%f\n",1.3); printf("%d %f\n",1.3,1.3);打印结果:1.300000-858993459 -92559653408872784000000000000000 阅读全文
摘要:
指向字符串常量的指针和字符串数组在使用时是有区别的。看下面两个函数//执行通过,返回“hello world”char *PtrChar(){ char *pc = "hello world"; return *r;}//执行错误,不能返回局部变量char *ArrChar(){ char ac[] = "hello world"; return ac;}出现上面的原因在于指针pc指向的字符串“hello world”存放在文字常量区,而数组ac中存放的字符串存放在栈区,当函数结束时,栈中的数据自动释放。再看下面:char* r = "hell 阅读全文