指针引发的探究

【程序】

#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"得来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值