指针引发的探究

来源:互联网 发布:新手如何开淘宝店 编辑:程序博客网 时间:2024/05/05 10:14

【程序】

#include<stdio.h>#include<stdlib.h>struct ss{int a[100];double b[200];char s[9];};int main(){printf("int:%d %d\n",sizeof(int),sizeof(int *));int a[100];int *b;b=a;printf("数组:%d %d\n",sizeof(a),sizeof(b));b=(int*)malloc(50000*sizeof(int));printf("malloc:%d\n",sizeof(b));ss c,*d;printf("a struct:%d %d\n",sizeof(c),sizeof(d));char e[2],*f;printf("string:%d %d\n",sizeof(e),sizeof(f));return 0;}


【运行】


【结论】

1.关于变量内存问题

系统中有一个变量区,变量被定义后都罗列到那里,还有一个指针区(或许是和变量放一起的),定义的指针也罗列下来。
但有所区别,变量定义后都是有内存的,有一个安稳的家一样,而指针在有对象之前是空(穷光蛋)的,只有在给指针一个指向
时,它才拥有一个空间。

疑问:这个空间若是由某个变量指派的(如程序的”数组“),它是新生成的还是与变量的是同一个?由malloc生成的空间呢(如程序的”malloc“),是属于指向空间的指针,还是无名的?由上面的程序,似乎指针的空间永远是4,即好像它是不占据空间的?

要是它真的不占据其它的空间,那对于指针的释放内存又是怎么一回事呢?

是不是对于由变量指派而来的空间,它是不能被释放的;malloc生成的空间,有指针指向就是没释放,断了指针就释放??

这样的话,空间本来就在那儿,计算机运行程序要占据空间(内存,是有限的),程序运行时,有它涉足的东西占据的空间,计算机就不会再分配给其它程序了,只有由free()这类的函数申明释放后,这部份内存才是自由的,才可以(完全)给其它程序使用。

对吗???????????????

2.虽然说结构体名,数组名就代表了它的指针,但和一个纯粹的指针还是有区别的,由"数组"和"a struct"得来。

原创粉丝点击