1. 程式人生 > >C for ios ---陣列記憶體分析

C for ios ---陣列記憶體分析

陣列的記憶體分配

1.陣列內部儲存細節

  • 儲存方式:

    • 1)計算機會給陣列分配一塊連續的儲存空間
    • 2)陣列名代表陣列的首地址,從首地址位置,依次存入陣列的第1個、第2個….、第n個元素
    • 3)每個元素佔用相同的位元組數(取決於陣列型別)
    • 4)並且陣列中元素之間的地址是連續。
  • 示例

~~ 模擬該陣列的記憶體儲存細節如下: int x[2]={1,2};
~~ int ca[5]={'a','A','B','C','D'};
  • 注意:字元在記憶體中是以對應ASCII值的二進位制形式儲存的,而非上表的形式。 在這個例子中,陣列x的地址為它的首元素的地址0x08,陣列ca的地址為0x03。

2.陣列的地址

  • 在記憶體中,記憶體從大到小進行定址,為陣列分配了儲存空間後,陣列的元素自然的從上往下排列 儲存,整個陣列的地址為首元素的地址。
  • 陣列a的地址是ffc1,a[0]的地址是ffc1,a[1]的地址是ffc5
  • 因此a == &a[0],即第一個元素的地址就是整個陣列的地址
    陣列名就是陣列的地址
&charValues = &charValues[0] = charValues

3.陣列的越界問題

  • 陣列越界導致的問題
    • 約錯物件
    • 程式崩潰
  • 在使用陣列的時候,一定不要訪問不屬於自己的記憶體空間
~~     char cs1[2] = {1, 2};
~~     char
cs2[3] = {3, 4, 5}; ~~ cs2[3] = 88; // 注意:這句訪問到了不屬於cs1的記憶體 ~~ printf("cs1[0] = %d\n", cs1[0] ); ~~ 輸出結果: 88