關於儲存單元的問題,C語言的儲存單元問題

2022-09-12 10:05:03 字數 1721 閱讀 1194

1樓:

1.編譯的過程是編譯器對程式的乙個壓棧操作,雖然只產生了乙個可執行檔案,其實記憶體已經為變數分配了空間,這個問題你可以通過資料結構的學習來更清晰的了解。

2.這裡的2000是不存在的,也就是說沒有乙個記憶體的實體地址叫2000,只不過是個標示,2000是代表物理記憶體中某個儲存單元的實體地址而已,僅僅是個代表,方便講解和思考。但是它所代表的記憶體儲存單元是真實存在的。

具體的位址就像第三個問題中的輸出結果。

3.是的,一般位址習慣用十六進位制表示,即 printf(「p=%#x\n」,p);

以上答案為個人理解,不滿意的地方多多包涵。。。

2樓:

1、編譯程式,是把使用者**翻譯成可執行的二進位制**。記憶體單元的分配是在程式執行時,自動分配的。至於它分配到的這個位址是在編譯時指定,還是在執行時指定,就不清楚了,猜想應該是後者。

2、這個2000就是實體地址,實際存在的。計算機的位址就像人的身份證,是唯一的,也就是記憶體的編號。

3、是位址,p=1245048 是 a[0] 這個變數的位址,p+1=1245052 是 a[1] 的位址。

3樓:潭恕懷申

儲存單元是儲存元的集合,儲存單元怎麼能是儲存單元的集合呢?儲存單元能儲存乙個字或乙個位元組,是儲存元的集合。

c語言的儲存單元問題

4樓:匿名使用者

讓全域性變數擁有連續的位址有兩種方法:

1. 定義陣列,比如 unsigned char a[100];

這樣就定義了乙個長度為100的型別為unsigned char的陣列,相當於100個unsigned char 型別的全域性變數,他們的位址是連續的:第乙個位址為a,第二個為a+1,……

2. 全域性作用域中定義乙個指標,然後在主函式main中為其動態分配記憶體,比如全域性作用域中定義unsigned char *p,主函式中動態分配記憶體語句如下:

p=(unsigned char*)malloc( 100 * sizeof(unsigned char));

意義就是分配100個unsigned char 型別變數所佔據的連續記憶體,使p指標指向該段記憶體的首位址。

我們並沒有辦法讓不同型別的變數具有連續的位址,除非定義結構體,然後使用結構體型別定義全域性變數。結構體定義如下:

struct s_type;

struct s_type s_var;

這時候s_var結構中有兩個field(其實也可以稱為變數),其位址是連續的。

不過,該位址連續僅僅是指應用程式層次的位址連續。作業系統不一定會把該段位址空間對映到連續的物理記憶體位址上。然而,應用程式並不用關心物理記憶體位址。

還有一點,全域性變數要麼不初始化,要麼必須用常量或者常量表示式初始化。

int a=100;

int b=a;

這麼定義全域性變數並初始化是不對的。儘管編譯器可以知道a的值是100,但是它並不會去推斷。

5樓:

1. 有什麼意義呢?如果執意追求這一點,可以將需要連續分配的全域性變數組合起來宣告為乙個結構體。

2. 不可以。

6樓:

用陣列表示就可以了,或者動態分配 type *p = (type *)malloc(sizeof(type)); p[i]就可以引用。至於不同型別我就不知道了,因為不清楚標準裡結構體是否為連續儲存,不過一般的實現都是連續儲存結構的。

c語言關於陣列中0和的儲存問題,C語言關於陣列中0和 0 的儲存問題

只能佔用4 個 第五個要留給 0 a 4 0 和 a 4 0 這倆一樣 0 ascii 碼 0 a 4 0 這樣的 0才是ascii碼48 不要被那些人誤導 首先乙個字串的話末尾是必須要有 0的 否則會越界,這樣的後果就是程式會有bug,如果你的陣列有5個空間的話,最後乙個一定要留給 0至於a 4 ...

關於堆疊和變數儲存,c語言裡什麼變數儲存在堆中什麼變數儲存在棧中啊!

1.c語言中的堆疊是一種資料結構,它表示按照規定強制要求按fifo或filo的方式進行資料讀寫,是軟體層面的意義,你需要定義pop push的具體操作。而微控制器中的堆疊是硬體層面的意義,其實現是通過硬體電路實現的,push pop操作時固定的,你無法改變 2.微控制器分為兩種,哈佛體系和普林斯頓體...

關於C語言問題,關於C語言的問題

迴圈3次 5成立,結果 x 1,y 4,z 2。5成立,結果 x 2,y 3,z 1。5成立,結果 x 3,y 2,z 0。5失敗且不再執行 右側的 x,退出迴圈。所以最後結果是x 3 y 2 z 1,b正確。關於c語言的問題 巨集定義與賦值不同,而是字串的帶入,因此參與計算時要特別注意計算的優先順...