指針引發的探究

【程序】

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

發佈了105 篇原創文章 · 獲贊 7 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章