C语言中的栈区和堆区变量的特点

690阅读 0评论2014-06-06 lt6419
分类:C/C++


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. struct st
  4. {
  5.     int a;
  6.     char b;
  7.     short c;
  8. };

  9. struct st *test()
  10. {
  11.     struct st *p = (struct st *)malloc(sizeof(struct st));
  12.     //p 在栈区分配空间,p指向了堆区一段连续空间
  13.     struct st s;
  14.     //s 在栈区分配的空间
  15.     struct st *q = (struct st *)malloc(sizeof(q));
  16.     /*q->b,q->c;*/


  17.     return p;//函数返回之后,栈区变量p的空间释放,但p指向的堆区内存仍然可使用没有释放
  18.     /*return &s;*/   //返回栈区变量的地址无意义
  19. }

  20. int main()
  21. {
  22.     struct st *p = NULL;

  23.     p = test();

  24.     printf("p = %p\n",p);
  25.     free(p);//free释放的是一段连续的堆区内存空间,而不是栈区变量p的空间,p的值也不会改变,注意:申请和释放可能
  26.             //不在同一个函数中,只要能完成堆区申请的内层即可。
  27.     printf("p = %p\n",p);
  28.     p = NULL;

  29.      

  30.     return 0;
  31. }

上一篇:求100以内的素数
下一篇:C语言顺序栈的实现