C for ios ---陣列記憶體分析
阿新 • • 發佈:2019-01-03
陣列的記憶體分配
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