#include <stdio.h>
void interrupt();
int main() {
int n = 8;
char c = 'Z';
interrupt();
printf("%d%c\n", n, c);
}
void interrupt() {
printf("Run normally\n");
//ADD CODE...
}
Как бы то ни было, эта функция выдаст «8Z» независимо от того, что делает метод interrupt(). Я пытаюсь изменить его так, чтобы он печатал «3Y», ничего не меняя в исходной основной функции, и только с использованием функции interrupt() (не разрешается передавать аргументы!). Мне разрешено использовать переменные в функции interrupt(), но я смущен тем, как вы получаете адреса «n» и «c», не создавая глобальную переменную, которая могла бы победить цель этого вопроса. Поскольку адрес стека изменяется каждый раз, когда это выполняется, похоже, нет способа сделать арифметику указателя (это то, что мне нужно сделать), и поэтому я немного запутался и застрял.Используйте арифметику указателя, чтобы изменить значение переменной в другой функции.
Это настоящий вопрос программирования? где ты это нашел? –
Да, это вопрос программирования. Я полагаю, что пункт назначения состоял в том, чтобы вы изменили то, что main() печатает с использованием арифметики указателя в другой функции, но мой вопрос заключается в том, как вы можете получить доступ к этой информации, не используя глобальную переменную или параметры передачи. Если это невозможно. – Senescence
Для этого нет твердого кросс-платформенного решения. Но, зная специфику компилятора и систему ABI, вы можете рассчитать смещения стека и тем самым изменить стек вызывающей функции (учитывая, что его локальные переменные фактически распределены по стеку, а не в регистрах). –