Я знаю, что для структуры
struct sequences{
int a[3];
int b[3];
} sequence = {{1,2,3},{4,5,6}};
a и b хранятся рядом друг с другом, т.е. если я делаю
int i;
for(i=0; i<6; ++i){
printf("%d", sequence.a[i]);
}
Я получу вывод 123456.
Я пытался сохранить эти два массива вне основной функции, но не в структуре
int a[3] = {1,2,3};
int b[3] = {4,5,6};
и когда я пытаюсь сделать то же самое,
for(i=0; i<6; ++i){
sum = sum + a[i];
}
Я получаю вывод 123045. Таким образом, очевидно, что они не гарантированно будут храниться рядом друг с другом, если не в структуре.
Если я вместо этого сохраню массив и целое число после него, они, похоже, всегда будут в памяти друг за другом, т.е.
int a[3] = {1,2,3};
int x = 1000;
и
for(i=0; i<4; ++i){
printf("%d", a[i]);
}
дает 1231000.
Я понимаю, что компилятор, вероятно, выбирает, где хранить переменные, основываясь на некоторых сложных факторах, находящихся вне моего контроля, но есть ли правила, которые гарантируют , где две переменные будут храниться относительно друг друга, вроде бы для структур?