我想創造在裝配一個4個元素的數組:數組是否以相反的順序存儲在C/C++中?
; Create an array of 4 elements
push BYTE 'a'
push BYTE 'b'
push BYTE 'c'
push BYTE 'd'
和它來腦海裏數組存儲在C/C++以相反的順序(第一元件具有最低存儲器地址和最後一個元素具有最高的內存地址),所以要確保我的假設是正確的,我做了如下試驗:
#include <stdio.h>
int main()
{
char arr[4] = {'a', 'b', 'c', 'd'};
printf("Address: %d Value: %c\n", arr + 0, *(arr + 0));
printf("Address: %d Value: %c\n", arr + 1, *(arr + 1));
printf("Address: %d Value: %c\n", arr + 2, *(arr + 2));
printf("Address: %d Value: %c\n", arr + 3, *(arr + 3));
return 0;
}
和預期的輸出是:
Address: 3603656 Value: a
Address: 3603657 Value: b
Address: 3603658 Value: c
Address: 3603659 Value: d
那麼,這是否意味着我要創建這樣的大會數組:
; Create an array of 4 elements
push BYTE 'd'
push BYTE 'c'
push BYTE 'b'
push BYTE 'a'
,並假定它的第一個元素是「A」的地址。或者像以前那樣做沒有問題,而不是像以前那樣增加1來獲得下一個元素,我只是減少1?
編輯: 我的意思相反的順序爲相對於堆(其向下增長)。
爲什麼你更改順序C被轉化成總成,使插入到數組中?如果你在第一個數組中添加第一個數組,你應該保持相同的順序 –
數組存儲順序是一個不同的問題,然後堆棧增長的方向。通過以彙編語言將字節推入堆棧不會創建數組。 你能改說你的問題嗎? – Jakub
我看不到最低地址的第一個元素如何被視爲「反轉」。你似乎正在將數組的概念與堆棧混淆起來。 – Michael