-
記憶體分配是隨機完成的。 這樣,連續定義的兩個陣列可能是連續的,也可能不是連續的。 這取決於記憶體的分配。
-
在定義陣列時,記憶體空間的分配是隨機的,任何東西都可以誕生!
-
首先,你犯了乙個錯誤,在 c 中,陣列下標從 0 開始,所以 a[2] 和 b[2] 根本不存在。
其次,C語言不做任何邊界檢查,這項工作是由程式設計師自己完成的,所以在使用陣列時,要特別注意越界的問題。
作為這個程式的結果,事實證明陣列 a 在記憶體中的位置緊跟在陣列 b 之後,所以當你的陣列越界時,b[2] 的位置與 a[0] 的位置重合,並且 a[0] 會發生變化。
至於你說什麼時候改成j,你有沒有注意**? scanf("%d",&b[i]);
您正在使用 i。 在這種情況下,i=3,因此 b[3] 實際上更改為 a[1]。 如果你試一試,你就會發現。
-
原因是你的for迴圈是立方的,但你的陣列的大小只有2,所以你的行為是越界的,它是未定義的,兩個陣列分配的空間可能是相鄰的,因為c本身不檢查越界,所以你把它修改為相鄰的記憶體空間。
-
陣列溢位,結束條件應該小於 2,檢查記憶體就知道了,a 不能儲存並且沒有邊界檢查,自然向下擴充套件。
-
您的陣列已超出界,只需將 i<3 更改為 i<2。
-
第乙個問題是連續的,陣列是連續的,第二個不是。
-
第乙個是連續的,第二個不是。
-
你問題的核心應該是問如何獲得連續的記憶體空間,這可以通過malloc來實現。
-
因為陣列是從 x[0], x[1] 派生的。 這樣,xes 陣列中的第乙個數字是 x[0]。根據 for 迴圈中的 a[i-1],可以看到 i=1,因此操作可以從 a[0] 開始。
由於兩個相鄰元素是依次相加的,因此它應該是 x[i]+x[i-1],這確保了第一組數字被新增到 a[0]=x[0]+x[1]。
-
1.至於實體地址的分配是否連續,則與系統底部的堆空間分配演算法有關,只能說可能是連續的,也可能是不連續的,這取決於系統的演算法。
2.但是這並不影響你在應用層的使用,一般你的應用程式看到的位址是什麼樣子的,怎麼用,直接使用堆給你的位址絕對是對的!
3.請求分配的空間是連續的,可以使用自加減運算子(++,除非有乙個系統可以... B逆天而行,開個玩笑,呵呵。
-
分配給您的虛擬記憶體空間當然是乙個連續......至於物理記憶體,一般不需要管理,作業系統會負責......
-
是連續的,可以用運算子定址。 只是要小心不要越界並導致非法訪問。
-
你誤解了這本書的意思嗎? 乙個應用的記憶體是連續的,兩個應用的記憶體是兩個連續的塊,但兩個塊不一定連線。
-
new分配的空間是連續的。
它可以是 a++、a--
-
理論上不是,陣列是相同型別的資料的集合。
-
好吧,陣列中的資料型別應該都是相同的。 如果具有不同的資料型別,則可以定義包含所需資料型別的結構,然後定義結構陣列。
-
普通資料是不可能的,但有一種資料叫做公共體,可以用來儲存不同型別的資料。 定義方法示例如下:
union icf
icf arrdate[5];
arrdate[0].i=3;
arrdate[1].c='a';
arrdate[2].f=;
那麼 arrdate 的第乙個元素是整數,第二個元素是字元,第三個元素是浮點型。
-
#include
int main(void)
最好不要這樣做,即使你的記憶中有什麼並不重要。
-
通常,struct 成員持續儲存在記憶體中。
-
這不一定,結構體占用的記憶體是連續的,但其中的各個成員不一定是連續儲存的,這取決於結構體中定義的成員的順序是否位元組對齊,如圖所示。
-
結構的成員不一定必須在記憶體中是連續的,因為可以釋放某些單元以滿足對齊要求。 例如:
假設地面上有 10 盞路燈,我們可以使用長度為 10 的陣列來表示這些路燈的狀態,其中 1 表示亮,0 表示熄滅。 我們需要找出兩個相鄰數字之間有多少個長橙子。 >>>More
如果要接受 A 陣列中的所有數字,而 B 只接受滿足條件的數字,則會使 B 無法正常輸出,在這種情況下,初始化 B 並包含 >>>More