Таким образом, вы хотите найти адреса локальных переменных без использования оператора C, специально предназначенного для поиска адреса переменной.Почему?
Стоит отметить, что в любой современной комбинации компилятор / процессор i и j в вашем примере могут не находиться в стеке, если вы не используете оператор &
.Даже если вы что-то с ними делаете, чтобы компилятор не оптимизировал их, он все равно может поместить их в регистры.
Редактировать: Я прочитал ваш комментарийна ответ свидания, и я думаю, что знаю, о чем вас просят.Вот возможный ответ, но я должен подчеркнуть, что я делаю большие предположения о вашем компиляторе.В частности,
- все переменные хранятся в стеке
- переменные не оптимизированы (отключите все оптимизации в вашем компиляторе).
- область памяти дляавтоматические массивы распределяются непосредственно в стеке
- стек не очищается между вызовами функций
Если у вас есть такая функция:
int f()
{
int i = 1, j = 2;
return 0;
}
ВыМожно проверить порядок i, j в памяти с помощью этой функции:
void order()
{
int a[2];
if (a[0] == 1)
{
printf("i first\n");
}
else
{
printf("j first\n");
}
}
int main()
{
f();
order();
return 0;
}
Никогда не используйте ничего подобного в реальном коде.Он опирается на несколько частей официально неопределенного поведения.