Skocz do zawartości

Witamy w Nieoficjalnym polskim support'cie AMX Mod X

Witamy w Nieoficjalnym polskim support'cie AMX Mod X, jak w większości społeczności internetowych musisz się zarejestrować aby móc odpowiadać lub zakładać nowe tematy, ale nie bój się to jest prosty proces w którym wymagamy minimalnych informacji.
  • Rozpoczynaj nowe tematy i odpowiedaj na inne
  • Zapisz się do tematów i for, aby otrzymywać automatyczne uaktualnienia
  • Dodawaj wydarzenia do kalendarza społecznościowego
  • Stwórz swój własny profil i zdobywaj nowych znajomych
  • Zdobywaj nowe doświadczenia

Dołączona grafika Dołączona grafika

Guest Message by DevFuse
 

Zdjęcie

[ROZWIĄZANE] Przekazanie tablicy do funkcji a potem jej zwrócenie.


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


  • Zamknięty Temat jest zamknięty
7 odpowiedzi w tym temacie

#1 Rivit

    Godlike

  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 19.07.2014 20:33

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ź :)


  • +
  • -
  • 0

#2 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 19.07.2014 21:20

Zakoncz(info[256])
O to Ci chodzi?
  • +
  • -
  • 0

#3 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 20.07.2014 06:44

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
  • +
  • -
  • 0

#4 MAGNET

    SourceLearned ;)

  • Moderator

Reputacja: 661
Wszechmogący

  • Postów:1 535
  • GG:
  • Imię:Olek
  • Lokalizacja:Dalekoo
Offline

Napisano 20.07.2014 08:18

To zrob globalną I tyle
  • +
  • -
  • 0

#5 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 20.07.2014 08:29

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?
  • +
  • -
  • 0

#6 GwynBleidD

    Godlike

  • Przyjaciel

Reputacja: 1 869
Godlike

  • Postów:3 066
  • Steam:steam
  • Lokalizacja:Przemyśl
Offline

Napisano 20.07.2014 09:23

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

Więc gdy na niej sobie pooperujesz to się zmieni w obu funkcjach.
  • +
  • -
  • 0

NIE pomagam na PW. Nie trudź się, na zlecenia nie odpiszę... Od pomagania jest forum.
NIE zaglądam w tematy wysłane na PW. Jeśli są na forum to prędzej czy później je przeczytam. Jeśli mam co w nich odpisać, to odpiszę.
 
1988650.png?theme=dark


#7 Rivit

    Godlike

  • Autor tematu
  • Support Team

Reputacja: 1 319
Godlike

  • Postów:4 380
Offline

Napisano 20.07.2014 10:58

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

#8 R3X

    Godlike

  • Przyjaciel

Reputacja: 2 987
Godlike

  • Postów:4 248
  • Lokalizacja:Nie
Offline

Napisano 20.07.2014 11:36   Najlepsza odpowiedź

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, "!!!");
}

  • +
  • -
  • 3




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych