C语言基础10

栈区间:在函数内部声明的变量都存放在栈区间,比如int char 数组 结构体 指针,只管申请,系统会自动帮我回收,收回的时间是作用域结束之后,遵循的原则是"先进后出",

int a = 10;

const int m =10;

printf("%p\n", &m);

printf("%p\n", &a);

堆区间:在五大区间中占用比例较大的区间,需要手动申请和手动释放,遵循的原则 "先进先出",堆区间空间的开辟是无序的,并且没有名字,所以我们需要一个栈区的指针来指向堆内存的数值。

int *b =malloc(sizeof(int ) *2);

printf("%p\n",b);

free(b);

静态区:存放全局变量或者静态变量,生命周期很长,一般到程序结束才释放,使用static修饰的变量,只初始化一次,默认值为0

static int c= 23;

printf("%p\n", &c);

void test3( ){

  static int a =10; 第一次调用函数就赋初值,后面在调用函数这个语句就不会在允许。

  a++;

  printf("%d\n",a);    //输出10,11,12

}

 test3( );

 test3( );

 test3( );

常量区:我们平时遇到的常量都放到这里比如"myname",‘c‘,87,87.4

printf("%p\n",&"hello world ");

常量区变量不能被修改:

char  *str ="iphone";    //字符指针指向常量区中字符串。

char str1[] ="iphone";    // 将常量区字符串拷贝到栈区的名称为str1的空间中。

str1[0] = ‘I‘;        // 可以修改,编写代码的时候不会报错,但是在编译的时候就会报错。

str[0] = ‘I‘;        //会报错。

所以我们一般这样写:const char *str ="...." 这样写的好处就是在很大的项目中,我们在修改常量区变量的值的时候会报错,可以立即处理,而不是在编译运行之后报错,才从几万行代码中查找错误的源头。

代码区:一般是函数存放在这里,需要编译。

void func( );

void func( ){

  printf(...)‘  

}

printf("%p\n" , func );  //传入函数名称。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。