←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

[ROZWIĄZANE] Przekazanie tablicy do funkcj...


Najlepsza odpowiedź R3X 20.07.2014 11:36

To działa tak jak przekazanie parametru przez wskaźnik w cpp. Funkcja addSomeNoise nie otrzyma kopii tekstu "Hello John", ale dokładnie ten sam adres pamięci w którym przechowywany jest ten tekst w funkcji plugin_init(). Obie funkcje operują więc na dokładnie tym samym stringu.

public plugin_init() {
    new szMyAwesomeText[256];
    formatex(szMyAwesomeText, charsmax(szMyAwesomeText), "Hello %s", "John");
    log_amx("%s", szMyAwesomeText); //Hello John
 
    addSomeNoise(szMyAwesomeText, charsmax(szMyAwesomeText));
    log_amx("%s", szMyAwesomeText); //Hello John!!!
}
 
addSomeNoise( szText[], size )
{
    add(szText, size, "!!!");
}

Nie zawsze jest to pożądane, dlatego można zabezpieczyć przekazane tablice przed zapisem przez użycie słowa kluczowego const

public plugin_init() {
    new szMyAwesomeText[256];
    formatex(szMyAwesomeText, charsmax(szMyAwesomeText), "Hello %s", "John");
    log_amx("%s", szMyAwesomeText); //Hello John
 
    addSomeNoise(szMyAwesomeText, charsmax(szMyAwesomeText));
    log_amx("%s", szMyAwesomeText); //Hello John!!!
}
 
addSomeNoise( const szText[], size )
{
    //Błąd kompilacji
    add(szText, size, "!!!");
}
Przejdź do postu
Zablokowany

  • +
  • -
Rivit - zdjęcie Rivit 19.07.2014

Witam.

Mam taki kod:

inna funkcja()
{
     new info[256];
     formatex(info, charsmax(info), "Runda: %i^nTT %i:%i CT^n", roundnumber + 1, TTwin, CTwin)

     Zakoncz() //wywołanie TU POTRZEBUJE PRZESLAC
}
Zakoncz()
{
      new dane[64];
      formatex(dane, charsmax(dane), "Koniec w %i rundzie", roundnumber)
     // add(info, charsmax(info), dane, charsmax(dane))// JAKOS DODAC DO TEJ TABLICY

      //POTRZEBUJE ABY INFO SIE USTAWILO NA TO CO TU ZROBIE
}

Jak to zrobić? Czytałem o referencji itp. ale nie mam doświadczenia jeszcze. Proszę o podpoiwedź :)

Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 19.07.2014

Zakoncz(info[256])
O to Ci chodzi?
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 20.07.2014

Takie coś ale chce operować na tej tablicy w pierwszej funkcji. Pobranie i zwrocenie. Albo operowanie na jednej i tej samej. Cos jak wskaznik w cpp
Odpowiedz

  • +
  • -
MAGNET - zdjęcie MAGNET 20.07.2014

To zrob globalną I tyle
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 20.07.2014

Jak bym chciał to bym zrobił. To nie jest rozwiązanie o które prosiłem.
Nie ma w PAWN'ie wskaźników co nie?
Odpowiedz

  • +
  • -
GwynBleidD - zdjęcie GwynBleidD 20.07.2014

KAŻDA tablica zwracana jest przez wskaźnik...

Więc gdy na niej sobie pooperujesz to się zmieni w obu funkcjach.
Odpowiedz

  • +
  • -
Rivit - zdjęcie Rivit 20.07.2014

Hmm. Jak to zrobic? Bo nie rozumiem. Jak przesle ją do funkcji Zakoncz to ona się sama zwróci? Nie czaje tego.
Odpowiedz

  • +
  • -
Najlepsza odpowiedź R3X - zdjęcie R3X 20.07.2014

To działa tak jak przekazanie parametru przez wskaźnik w cpp. Funkcja addSomeNoise nie otrzyma kopii tekstu "Hello John", ale dokładnie ten sam adres pamięci w którym przechowywany jest ten tekst w funkcji plugin_init(). Obie funkcje operują więc na dokładnie tym samym stringu.

public plugin_init() {
    new szMyAwesomeText[256];
    formatex(szMyAwesomeText, charsmax(szMyAwesomeText), "Hello %s", "John");
    log_amx("%s", szMyAwesomeText); //Hello John
 
    addSomeNoise(szMyAwesomeText, charsmax(szMyAwesomeText));
    log_amx("%s", szMyAwesomeText); //Hello John!!!
}
 
addSomeNoise( szText[], size )
{
    add(szText, size, "!!!");
}

Nie zawsze jest to pożądane, dlatego można zabezpieczyć przekazane tablice przed zapisem przez użycie słowa kluczowego const

public plugin_init() {
    new szMyAwesomeText[256];
    formatex(szMyAwesomeText, charsmax(szMyAwesomeText), "Hello %s", "John");
    log_amx("%s", szMyAwesomeText); //Hello John
 
    addSomeNoise(szMyAwesomeText, charsmax(szMyAwesomeText));
    log_amx("%s", szMyAwesomeText); //Hello John!!!
}
 
addSomeNoise( const szText[], size )
{
    //Błąd kompilacji
    add(szText, size, "!!!");
}
Odpowiedz
Zablokowany