标签:
作者:郭孝星
微博:郭孝星的新浪微博
邮箱: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本身是在栈中。
申请后系统的响应
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]….当作一个个的指针变量来使用。
版权声明:当我们认真的去做一件事的时候,就能发现其中的无穷乐趣,丰富多彩的技术宛如路上的风景,边走边欣赏。
标签:
原文地址:http://blog.csdn.net/allenwells/article/details/47418929