2013年12月8日
摘要: 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,动态局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。3、数据域(或静态区)(static)—,全局变量和静态变量的存储是放在一块的;初始化的全局变量和静态变量在一块区域.data段, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域.bss段。 - 程序结束后有系统释放4、文字常量区 —常量字符串就是放在这里的。.. 阅读全文
posted @ 2013-12-08 20:48 思过崖 阅读(293) 评论(1) 推荐(0) 编辑
摘要: 一、宏定义1 宏是常用的预处理功能之一,是在编译之前进行宏替换,即将宏名替换成所定义的宏体。2 优点:可以使代码更简单,更容易,避免大量使用。3 宏定义定义在函数外面;格式:#define PI 3.14PI为宏的文件内容在编译前将PI的内容替换成3.144 宏与全局变量的区别宏相当于字符串的替换操作,内存中不存在全局变量在内存中是存在的。相同点:通常定义一个全局变量加上const修饰符,全局变量的值是不可以修改的。5 宏函数#define MianJi(r) PI*r*r宏函数只是文本,只是相当于做了内容替换的操作,注意参数是没有数据类型6 在声明数组时也可以使用宏#define SIZE 阅读全文
posted @ 2013-12-08 19:20 思过崖 阅读(518) 评论(0) 推荐(0) 编辑
摘要: #includestruct Node{ char a; //0 short b;//2,3 char c;//4, int d;//8,9,10,11} name;int main(){ char Array[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; struct Node *p = (struct Node*)(void*)Array; printf("%#x, %#x, %#x, %#x", (int)(p->a), (int)(p->b), (int)(p->c),(int) 阅读全文
posted @ 2013-12-08 17:29 思过崖 阅读(556) 评论(1) 推荐(0) 编辑
摘要: 解析:1 x, y, z被定义成全局变量,但是在调用函数void p(int *x, int y)时,传递过来的实参存在栈空间里,相当与从原来实参那里复制一份,在函数调用结束时要释放这些参数,所以不会改变原来的实参,这就是调用函数时参数的传递是单向的。2 由于z不是通过函数调用传递过来的参数,所以对z的操作就是对全局变量的操作,可以改变z的值。3 传递过来的指针也是一个参数,函数调用结束时也要被释放掉,但是释放的只是指针本身,在被调用的函数运行时指针参数改变的是指针所指向的变量本身,所以通过指针的传递可以让被调函数改变主调函数里面的的变量。 阅读全文
posted @ 2013-12-08 16:19 思过崖 阅读(721) 评论(0) 推荐(0) 编辑