данные разделяют в C++

У меня есть вопрос разъяснить мой беспорядок об организации памяти в компьютере в C++.

В C++ различные данные помещаются в другое местоположение. Мое понимание похоже на это.

1) раздел сегмента данных, где глобальные и статические данные расположены;

2) раздел "кучи", объекты, созданные новым

3) сложите раздел, локальную переменную

4) текстовый раздел, сам код.

Это правильно? Есть ли что-нибудь, что я пропустил или сделал неправильно?

Спасибо!

6
задан Chris Dwyer 19 February 2010 в 16:19
поделиться

1 ответ

Ну, несмотря на то, что был принят другой ответ, я собираюсь выбросить один там в любом случае.

$(document).ready(function() {

    var easterEgg = 'egg';
    var eggLength = easterEgg.length;
    var keyHistory = '';
    var match;
        $(document).keypress(function(e) {
            keyHistory += String.fromCharCode(e.which)
            match = keyHistory.match(easterEgg); 
            if(match) {
                alert(match);
                keyHistory = match =  '';
            } else if (keyHistory.length > 30) {
                keyHistory = keyHistory.substr((keyHistory.length - eggLength - 1));
            }
        });
});

Когда вы в конечном итоге наберете «яйцо» (для этого примера), вы получите предупреждение, и история ключей будет сброшена.

EDIT: Обновлен код для усечения последовательности, если он становится слишком длинным.

-121--4213336-

Откорректированный ответ

Вы можете легко прослушивать события на клавиатуре, возникающие при фокусировке текстового поля.

Просто добавьте событие KEY_DOWN непосредственно в текстовое поле, а затем делайте все, что хотите.

// get key presses only when the textfield is being edited
inputText.addEventListener(KeyboardEvent.KEY_DOWN,handler);
function handler(event:KeyboardEvent){

   // if the key is ENTER
   if(event.charCode == 13){

       // your code here
       doSomething();
   }
}

В отдельном примечании текстовые поля также отправляют другие полезные события:

  • При изменении пользователем (если текстовое поле ввода) -- Event.CHANGE
  • При вводе текста пользователем (если текстовое поле ввода) -- TextEvent.TEXT_INPUT
  • When ссылка щелкает (если текст HTML) -- TextEvent.LINK
  • При прокрутке пользователем (если многострочный текст и содержимое не подходят) -- Event.SCROLL

Я думаю, что единственный способ сделать то, что вы хотите, немного сложный.

В основном, невозможно получить какое-либо событие из обычного TextField, которое было бы инициировано при нажатии клавиши Enter. Вы должны делать работу вокруг...

Одной из идей было бы прослушивание текстового поля для фокус-событий. Когда он имеет фокус, вы добавляете прослушиватель в рабочую область для событий на панели клавиш и проверяете, нажата ли клавиша Enter, если это так, запустите действие, в противном случае пропустите.

Пример кода:

inputText.addEventListener(FocusEvent.FOCUS_IN,textInputHandler);
inputText.addEventListener(FocusEvent.FOCUS_OUT,textInputHandlerOut);

function textInputHandler(event:FocusEvent):void {
    //our textfield has focus, we want to listen for keyboard events.
    stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler);
}

function textInputHandlerOut(event:FocusEvent):void {
    //our textfield lost focus, remove our listener.
    stage.removeEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler);
}

function keyDownHandler( e:KeyboardEvent ):void{
    //a key was pressed, check if it was Enter => charCode 13.
    if( e.charCode == 13 ){
      //ok, enter was pressed. Do your thing.
      trace("We pressed enter, doSomething" )
    }
}
-121--3221211-

Обычно существует по крайней мере два раздела данных. Один с инициализированными глобалами, другой без (BSS). Раздел стека обычно не излучается в двоичном файле.

Конечно, такие конкретные вопросы реализации бесполезны, если не указать реализацию.

1
ответ дан 17 December 2019 в 20:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: