» »

Statična tabela v c++ ?

Statična tabela v c++ ?

mercury ::

Živjo fantje,
V enem programu sem dobil nekaj kar bi mi znalo koristiti v prihodnje. Zanima me, ali pomeni naslednji zapis tabelo podatkov, ki pa se nekako razlikuje od navadnega array-a?

static yyconst short int yy_acclist[288] =
{ 0,
43, 40, 42, 41, 42, 32, 40, 42, 40, 42,
40, 42, 40, 42, 34, 37, 40, 42, 34, 37,
40, 42, 37, 40, 42, 37, 40, 42, 37, 40,
42, 37, 40, 42, 37, 40, 42, 37, 40, 42,
37, 40, 42, 37, 40, 42, 37, 40, 42, 37,
40, 42, 40, 42, 41, 42, 1, 32, 40, 42,
40, 42, 40, 42, 40, 42, 34, 37, 40, 42,
34, 37, 40, 42, 37, 40, 42, 37, 40, 42,
37, 40, 42, 37, 40, 42, 37, 40, 42, 37,
40, 42, 37, 40, 42, 37, 40, 42, 37, 40,

42, 37, 40, 42, 38, 39, 34, 37, 37, 37,
37, 37, 37, 37, 37, 25, 37, 26, 37, 19,
37, 15, 37, 17, 37, 37, 37, 37, 21, 37,
37, 9, 37, 33, 37, 37, 37, 37, 37, 37,
37, 1, 38, 39, 34, 37, 37, 37, 37, 37,
37, 37, 37, 25, 37, 26, 37, 19, 37, 15,
37, 17, 37, 37, 37, 37, 21, 37, 37, 9,
37, 33, 37, 37, 37, 37, 37, 37, 37, 36,
39, 35, 37, 5, 37, 4, 37, 8, 37, 37,
11, 37, 37, 18, 37, 14, 37, 13, 37, 12,

37, 20, 37, 16, 37, 22, 37, 2, 37, 24,
37, 29, 37, 30, 37, 7, 37, 27, 37, 28,
37, 6, 37, 10, 37, 36, 39, 35, 37, 5,
37, 4, 37, 8, 37, 37, 11, 37, 37, 18,
37, 14, 37, 13, 37, 12, 37, 20, 37, 16,
37, 22, 37, 2, 37, 24, 37, 29, 37, 30,
37, 7, 37, 27, 37, 28, 37, 6, 37, 10,
37, 23, 37, 37, 3, 37, 23, 37, 37, 3,
37, 37, 37, 31, 37, 31, 37
} ;

Če gre za neke vrste tabelo, mi potem lahko razložite, kako točno se jo definira ( kaj pomeni v tem primeru yyconst in kaj yy_acclist[288] ). Seveda me še zanima, kako se iz take tabele bere.

Lep pozdrav,

OwcA ::

yyconst je nestandarden simbol, poglej kako je definiran.
yy_acclist je ime spremenljivke.
[288] jo deklarira kot tabelo z 288 elementi (torej tečejo indeksi od 0 do 287).

static ima dva pomena. Če gre za lokalno spremenljivko (definirano znotraj neke funkcije), se njena vrednost ohranja med funkcijskimi klici.:
int bee()
{
  static int a = 0;
  std::cout << a++ << endl;
}

...
bee();
bee();

Pri prvem klicu (predpostavimo, da funkcije ne kličemo v nobenem drugem modulu) se bo izpisala 0, pri drugem 1 (pri tretjem bi se 2 in tako naprej).

Ako pa gre za atribut razreda, si nje vrednost delijo vse instance tega razreda:
class Ovcica
{
  static int st_nog = 4;
  
  void izpisiSteviloNog()
  {
      std::cout << a << endl;
  }
  void nastaviSteviloNog(int n)
  {
      st_nog = n;
  }
};

...

Ovcica ana, berta;
ana.izpisiSteviloNog();
berta.izpisiSteviloNog();
ana.nastaviSteviloNog(5); // priletijo hudobni vesoljci in mojo credno genetsko modificirajo ;)
ana.izpisiSteviloNog();
berta.izpisiSteviloNog();

V tem primeru bo izpis:
4
4
5
5
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

trs ::

Tabela podatkov je navaden array in se obnasa popolnoma isto:
int bala[10] je isto kot int bala[10] = { 1,2,3,4,5,6,7,8,9,10 };

Razlika je samo v tem, da v prvem primeru, bodo podatki nedefinirani(torej moras sam inicializirat array z ustreznimi podatki) v drugem primeru pa so vrednosti elementov definirane. static v tem primeru pomeni, da lahko uporabljas array samo znotraj istega C filea. static, kot je ze Owca omenil, ima vec pomenov(iz glave jih nastejem 3, ne samo dva ;) Simboli v Cju so po defaultu extern(torej dostopni tudi iz drugih C modulov). V tem primeru je static obratno kot extern ;) Upam da je bilo dovolj jasno ...

Aja, pa se yyconst ... tisto je verjetno v kakem header fileu definiran typedef ali manj verjetno #define ...

mercury ::

OK. Jaz bi rad ustvaril eno zelo dolg konstanten string, iz katerega bi potem bral znak za znakom. Ne potrebujem pa arraya v ram-u, ker bi iz arraya samo bral in ne bi vanj pisal. Ker je string ker dolg bi ga rad napisal v več vrstah, kar pa mi še ni uspelo. Poskušal sem takole, a z errorji:

const char moj_string[] = {"blablablabla
blablablablabla
blablablablabla"};

To ustvari error constant in new line.

OwcA ::

Če govoriš o C++, čemu potem ne uporabljaš std::string?
Otroška radovednost - gonilo napredka.

mercury ::

Ker sem preneumen in prelen, da bi šel najprej v MSDN pogledat kaj sploh obstaja za string manipulation. Hvala!!!

BigWhale ::

Potem pa trpi.... ... no, si vsaj iskren... ;>

Zgodovina sprememb…

  • spremenil: BigWhale ()

mercury ::

OK, sem poskusil s std::string in še vedno dobim isti error: newline in constant. Torej rad bi napisal konstanten string v več vrstah, zato da bo program bolj pregleden. Kako se to naredi ( seveda v c++ )???

Lep pozdrav

BigWhale ::

\n

CCfly ::

Mislim da je hotel vprašati kako spisati kodo v več vrstic, ne kako hraniti string v več vrsticah. Če se prav spomnim daš samo \ na konec vrstice. Ne da se mi pogledat, ker imam pred samo knjigo Poslovne funkcije :( :'( ;((

trs ::

char bla[] = "To naj bi bil "
"en zelo dolg "
"vec vrsticni "
"string";


int main(void) {
printf("%s\n", bla);
}

Rezultat tega programa je tale:
To naj bi bil en zelo dolg vec vrsticni string

No, ce hoces imet res dolge stringe, ti priporocam da jih preberes iz kake datoteke...

DMouse ::

Ja na konec daš \ potem moraš pa string nadaljevat na začetku nove vrstice


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

kaj tele kilometri ne bodo držali ? (strani: 1 2 )

Oddelek: Na cesti
768595 (5606) IL_DIAVOLO
»

EU žuga Applu zaradi zavajajočega oglaševanja

Oddelek: Novice / Ostale najave
156444 (5014) tomaz-
»

Odprl sumljiv fajl - kaj zdaj?

Oddelek: Informacijska varnost
81466 (1169) Malcolm_Y
»

Nekaj analize teme "50let bla bla ..."

Oddelek: Loža
202344 (1582) gzibret
»

R 9550! Rabm hitre nasvete (strani: 1 2 )

Oddelek: Kaj kupiti
624064 (3387) Jan987

Več podobnih tem