标签:.net comm class include clu view 文件的 根据 局部变量
作者:郭孝星
微博:郭孝星的新浪微博
邮箱:allenwells@163.com
博客:http://blog.csdn.net/allenwells
Github:https://github.com/AllenWells
全局变量存放在静态区中,局部变量存放在堆栈中。
能够。在不同的.c文件里以static形式来声明同名全局变量。前提是当中仅仅能有一个C文件对此变量赋初值,此时连接时不会出错。
和while(1)同样,无限循环。
全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式,两者在存储方式上并无差别。而非静态全局变量在各个源文件里都是有效的。而静态全局变量则仅仅在定义该变量的源文件有效。static全局变量值初始化一次,防止在其他文件单元中被引用。
因此,把局部变量改成静态变量后改变了它的存储方式即该变了它的生存期。而全局变量改成静态变量后改变了它的作用域,限制了它的使用范围。
static局部变量仅仅初始化一次,下一次根据上一次的结果值。
static函数与普通函数的作用域不同,仅在本文件。仅仅在当前文件里使用的函数应该说明为内部函数。static函数在内存中仅仅有一份。普通函数在每一个调用中都维持一份拷贝。
1.10 程序的内存分配
初始化的全局变量和静态变量放在一块区域,未初始化的全局变量和静态变量放在响铃的还有一块区域。
举例
int a = 0; //全局初始化区
char *p1; //全局未初始化区
main()
{
int b;
char s[] = “abc”; //栈
char *p2; //栈
char *p3 = “123456”;
static int c = 0; //全局初始化区
p1 = (char *)malloc(10);
p1 = (char *)malloc(10); //分配分配得来10和20字节区域在堆区
strcpy(p1, “123456”); //123456\0放在常量区。编译器可能将它与“1223456”优化成一个地方。
}
申请方式
C:p1 = (char *)malloc(10);
C++:p2 = (char *)malloc(10);
注意:p1和p2本身是在栈中。
申请后系统的响应
同一时候,系统会在这块内存空间的首地址记录本次分配的大小,这样delete语句才干正确的释放本内存空间。
另外。由于找到的堆结点的大小并不一定正好等于申请的大小,系统会自己主动的将多余的那部分又一次放入空暇链表中。
int(*p)[4],这个就是行指针这样的类型的指针p是指向一个一维数组。这个一维数组包括4个整形元素。
可是 int a[4];p=a; 这样的方式却是不正确的由于p仅仅能指向一个整型的一维数组,不能指向一个整型数据,a所指向的正是a[0]。是个整型数。
实际上int(*p)[4]这样的类型的指针是用于多维数组中的。比方定义一个二维数组int b[3][4],就能够这样赋值p=&b[0],使p指向一维数组b[0],并且p的增减是以一维数组的长度为单位的,比方p+1指向的就是b[1]了
int *p[4]这个是指针数组了,首先弄明确这个是数组,里面存放的是指针也就是地址。这个地址所指向的是一个整型数据。你能够把p[0],p[1]….当作一个个的指针变量来使用。
标签:.net comm class include clu view 文件的 根据 局部变量
原文地址:http://www.cnblogs.com/claireyuancy/p/7220937.html