為什麼兩個相鄰的陣列不連續儲存

發布 教育 2024-08-14
22個回答
  1. 匿名使用者2024-02-01

    記憶體分配是隨機完成的。 這樣,連續定義的兩個陣列可能是連續的,也可能不是連續的。 這取決於記憶體的分配。

  2. 匿名使用者2024-01-31

    在定義陣列時,記憶體空間的分配是隨機的,任何東西都可以誕生!

  3. 匿名使用者2024-01-30

    首先,你犯了乙個錯誤,在 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]。 如果你試一試,你就會發現。

  4. 匿名使用者2024-01-29

    原因是你的for迴圈是立方的,但你的陣列的大小只有2,所以你的行為是越界的,它是未定義的,兩個陣列分配的空間可能是相鄰的,因為c本身不檢查越界,所以你把它修改為相鄰的記憶體空間。

  5. 匿名使用者2024-01-28

    陣列溢位,結束條件應該小於 2,檢查記憶體就知道了,a 不能儲存並且沒有邊界檢查,自然向下擴充套件。

  6. 匿名使用者2024-01-27

    您的陣列已超出界,只需將 i<3 更改為 i<2。

  7. 匿名使用者2024-01-26

    第乙個問題是連續的,陣列是連續的,第二個不是。

  8. 匿名使用者2024-01-25

    第乙個是連續的,第二個不是。

  9. 匿名使用者2024-01-24

    你問題的核心應該是問如何獲得連續的記憶體空間,這可以通過malloc來實現。

  10. 匿名使用者2024-01-23

    因為陣列是從 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]。

  11. 匿名使用者2024-01-22

    1.至於實體地址的分配是否連續,則與系統底部的堆空間分配演算法有關,只能說可能是連續的,也可能是不連續的,這取決於系統的演算法。

    2.但是這並不影響你在應用層的使用,一般你的應用程式看到的位址是什麼樣子的,怎麼用,直接使用堆給你的位址絕對是對的!

    3.請求分配的空間是連續的,可以使用自加減運算子(++,除非有乙個系統可以... B逆天而行,開個玩笑,呵呵。

  12. 匿名使用者2024-01-21

    分配給您的虛擬記憶體空間當然是乙個連續......至於物理記憶體,一般不需要管理,作業系統會負責......

  13. 匿名使用者2024-01-20

    是連續的,可以用運算子定址。 只是要小心不要越界並導致非法訪問。

  14. 匿名使用者2024-01-19

    你誤解了這本書的意思嗎? 乙個應用的記憶體是連續的,兩個應用的記憶體是兩個連續的塊,但兩個塊不一定連線。

  15. 匿名使用者2024-01-18

    new分配的空間是連續的。

    它可以是 a++、a--

  16. 匿名使用者2024-01-17

    理論上不是,陣列是相同型別的資料的集合。

  17. 匿名使用者2024-01-16

    好吧,陣列中的資料型別應該都是相同的。 如果具有不同的資料型別,則可以定義包含所需資料型別的結構,然後定義結構陣列。

  18. 匿名使用者2024-01-15

    普通資料是不可能的,但有一種資料叫做公共體,可以用來儲存不同型別的資料。 定義方法示例如下:

    union icf

    icf arrdate[5];

    arrdate[0].i=3;

    arrdate[1].c='a';

    arrdate[2].f=;

    那麼 arrdate 的第乙個元素是整數,第二個元素是字元,第三個元素是浮點型。

  19. 匿名使用者2024-01-14

    #include

    int main(void)

    最好不要這樣做,即使你的記憶中有什麼並不重要。

  20. 匿名使用者2024-01-13

    通常,struct 成員持續儲存在記憶體中。

  21. 匿名使用者2024-01-12

    這不一定,結構體占用的記憶體是連續的,但其中的各個成員不一定是連續儲存的,這取決於結構體中定義的成員的順序是否位元組對齊,如圖所示。

  22. 匿名使用者2024-01-11

    結構的成員不一定必須在記憶體中是連續的,因為可以釋放某些單元以滿足對齊要求。 例如:

相關回答
16個回答2024-08-14

假設地面上有 10 盞路燈,我們可以使用長度為 10 的陣列來表示這些路燈的狀態,其中 1 表示亮,0 表示熄滅。 我們需要找出兩個相鄰數字之間有多少個長橙子。 >>>More

27個回答2024-08-14

如果要接受 A 陣列中的所有數字,而 B 只接受滿足條件的數字,則會使 B 無法正常輸出,在這種情況下,初始化 B 並包含 >>>More

19個回答2024-08-14

首先,x 的初始值為 2

在第乙個迴圈中,列印 *,然後 x--,x 變為 1。 然後判斷 x>=0 滿足,繼續迴圈; >>>More

12個回答2024-08-14

有 3 種型別的問題:1 個交叉點、2 個交叉點和 3 個交叉點。 >>>More

4個回答2024-08-14

陣列和指標是 C++ 中乙個困難的部分,為了理解和使用它們,您必須首先了解編譯器如何處理指標型別。 >>>More