Об игре
Новости
Войти
Регистрация
Рейтинг
Форум
2:45
1054
 online
Требуется авторизация
Вы не авторизованы
   Форумы-->Форум для внеигровых тем-->
1|2|3|4

АвторС++ (вопросик)
А вдруг тут есть знающие люди.
Код программы:
#include <stdlib.h>
#include <stdio.h>

void func(void)
{
int i;
printf("Print: ");
for( ; i > 0 ; i-- ) printf("%d ", i);
printf("Done\n");
}
int main(int argc,char* argv)
{
int *a;
a = (int*)((((int)(&argc) - 8) & (-0x10)) - 0x24);
*a=10; func();
*a=20; func();
return 0;
}

Как можете заметить, значение передается еще до того, как объявлена переменная.
Это работает! (а то вдруг кто не верит)

Вопрос:
a = (int*)((((int)(&argc) - 8) & (-0x10)) - 0x24);
Как загнать эту строчку в функцию, чтоб оно считалось не таким способом?
молодец, я горжусь тобой!
для ЛунныйМечтатель:
Пасиб за ап...
тс - крутой алхимик, главное не зацикливаться...
Я слышал на некоторых кафедрах отчисление 15.

Обрадуй военкома.
вопрос. а зачем такую ересь исполнять?
для Zael_Hell:
мм... все сессии закрыты : )

для letalis:
Надо.Тем более не ересь. Нет идеи как это можно изменить?
a = (int*)((((int)(&argc) - 8) & (-0x10)) - 0x24);
эмм, а что ты хотел этим сделать?
для sanek_92:
этим я напрямую в память ображаюсь к переменной i, которая еще не создана.
Вся программа один сплошной лулз...
для MrSlayer:
Это программа просто показывает конкретный "прием". Не буду же я всю прогу, которая это использует сюда постить. Ибо могу нарущать пользовательское соглашение винды, которую нельзя дисамблерить.
Я не жду, что кто-то напишет конкретный пример, как это под общий вид загнать, может кто идею даст...
Это программа просто показывает конкретный "прием".
а можно поподробнее, а то заинтересовал)
Koek
Прием чего?
для sanek_92:
А тебя не смущает, что сначала я кидаю переменной значение, а потом ее создаю, и причем все это работает?
начать хотя бы с этого... Что ты выводить тут собрался то?
void func(void)
{
int i;
printf("Print: ");
for( ; i > 0 ; i-- ) printf("%d ", i);
printf("Done\n");
}
Прием чего?
пост 4
для Koek:
хм, меня бы может и смутило бы, но я не вижу, в каком месте программы наблюдается описанная тобой ситуация
*a=10; func();
это выведет
10 9 8 7 6 5 4 3 2 1 Done

*a=20; func();
20 19 18 ... 3 2 1 Done

При этом, я нигде не передаю значение переменной i для того чтоб цикл работал. Но оно работает.
хоть бы на ворнинги при компиляции посмотрел...
1|2|3|4
К списку тем
2007-2025, онлайн игры HeroesWM