Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

strukture

[es] :: C/C++ programiranje :: strukture

[ Pregleda: 4001 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

TrinitI

Član broj: 121
Poruke: 47
*.041net.co.yu

Sajt: localhost


Profil

icon strukture17.03.2001. u 19:47 - pre 281 meseci
Kako se kreiraju doticne ? I kako da upisujem tj citam iz njih ?

Auu koliko ja pitanja postacih na ovom forumu ?
T r i n i t I
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.verat.net



+1 Profil

icon Re: strukture17.03.2001. u 21:13 - pre 281 meseci
Pa definisu se sa

struct imestrukture{
tippodatka ime;
};

evo i primer

struct player{
char *name;
int visina;
int tezina;
};

kreiras objekat (navika mi ostala iz C++)

player predator;
predator.name="voja";
predator.visina=187;
predator.tezina=87;

Ako ovo koristis kao pinter onda ->

player *preda = & predator;
printf(" Ime : %s\n",preda->name);
printf(" visina : %d\n",preda->visina);
printf(" tezina : %d\n",preda->tezina);
 
Odgovor na temu

Mikky

Član broj: 18
Poruke: 1563
*.yubc.net

ICQ: 44582291


+58 Profil

icon Re: strukture17.03.2001. u 21:44 - pre 281 meseci
cekaj struktura je isto sto i klasa samo sto kod kod klase su ti unutrasnje promenljive i funkcije private po defaultu a kod struct su public? ili obrnuto???

zasto si pointer ka char name a ne jednostavno char name??
-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.verat.net



+1 Profil

icon Re: strukture18.03.2001. u 09:33 - pre 281 meseci
Clanovi klase mogu da budu private,protected i public ->

public moze da menja svako i bilo otkud
protected -> moze da menja izvedena klasa i cale klasas (heh terminologija fork())
private -> mogu da menjaju samo funkcije clanice te klase gde su private definisani

char *name sam stavio jer bi char name alociralo mesto za 1 bajt a char *-u mozes da pridodas adresu nekog stringa koji se nalazi u memoriji ->

struct player *preda = {"predator",187,87}; a sa char name ->

struct player *preda1 = { 0x41,187,87}; i sad bi char name imalo A :o)
 
Odgovor na temu

Mikky

Član broj: 18
Poruke: 1563
*.yubc.net

ICQ: 44582291


+58 Profil

icon Re: strukture18.03.2001. u 22:09 - pre 281 meseci
aha, nisam znao da to moze
ql fora
-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.verat.net



+1 Profil

icon Re: strukture19.03.2001. u 09:23 - pre 281 meseci
Pa moras da pravis razliku izmedju
char
char []
char *

char je alociranje jednog byte na stacku ili u data segmentu programa
char [] je alociranje niza bajtova na stacku ili u datan segmentu programa
char * je pointer i samim tim alocira 4 byte za 32bitnu adresu...

primena :
char pa sta zanm recimo zqa ispisivanje svih znakovao od 0 - 255
char [] se cesto koristi kao
char niz[]="predator"; i samim tim se alocira memorija na stacku dovoljno velika da sacuva rec predator moze i char niz[1024] ali onda sa njim pri predavanju funkciji i koriscenju u programu manipulises slicno kao sa pointerom :o)
Code:

char gg[1024];
gg="predator";    //pogresno !!!!!!!!!!!!
strcpy(gg,"predator");   //ispravno


i char * se koristi na dva nacina ->

char *preda="predator";
char *preda=malloc(200); bzero(preda,200);

prvo pointeru dodeljuje adresu od pocetka stringa predator u data segmentu
a drugo alocira 200 byte i pocetak dodeljuje pointeru preda...ima jos primena ali ove
su najvaznije ...
 
Odgovor na temu

Mikky

Član broj: 18
Poruke: 1563
*.yubc.net

ICQ: 44582291


+58 Profil

icon Re: Re: strukture19.03.2001. u 21:53 - pre 281 meseci
Citat:
predator wrote:

Code:

char gg[1024];
gg="predator";    //pogresno !!!!!!!!!!!!

[b]ok ali ovo je sasvim legalan iskaz zar ne?? samo sto ce se prvih 8 mesta plus null karakter u nizu popuniti a ostalih 1015 ostati prazno[/b]


strcpy(gg,"predator");   //ispravno

strcpy je neka funkcija iz nekog headera? kakva je razlika izmedju toga sto ona radi i onoga sto si napisao gore, zar nece u oba slucaja da se popuni prvih 9 mesta niza a ostalo da ostane prazno





ok a koja je razlika izmedju definisanja na staku i u memoriji (data segmentu), zar nije bolje to raditi u memoriji jer je stak ogranicen tj dosta manji od raspolozive memorije, i sta radi kompajler po defaultu, da li stavlja na stak ili ds



-I know UNIX, PASCAL, C, FORTRAN,
COBOL, and nineteen other high-tech
words.
 
Odgovor na temu

Vojislav Milunovic

Član broj: 25
Poruke: 2117
*.verat.net



+1 Profil

icon Re: Re: Re: strukture20.03.2001. u 08:21 - pre 281 meseci
[quote]Mikky wrote:
[quote]predator wrote:

Code:

char gg[1024];
gg="predator";    //pogresno !!!!!!!!!!!!

[b]ok ali ovo je sasvim legalan iskaz zar ne?? samo sto ce se prvih 8 mesta plus null karakter u nizu popuniti a ostalih 1015 ostati prazno[/b]

[quote]
Pazi ovako-> ovo "predator" se nece predati kao "predator" vec kao adresa gde je ovaj string sacuvan u data semgmentu programa i samim tim se tebi javlja greska kod kompajliranja :o)

Citat:

strcpy(gg,"predator");   //ispravno

strcpy je neka funkcija iz nekog headera? kakva je razlika izmedju toga sto ona radi i onoga sto si napisao gore, zar nece u oba slucaja da se popuni prvih 9 mesta niza a ostalo da ostane prazno


strcpy() funckija je standardna C funkcija za rad sa stringovima i njena deklaracija se nalazi u string.h...njen oblik je ovakav ->
extern char *strcpy(char *dst,const char *src);

Kao sto vidis prihvata dva pointera i zatim posle prostim movl + cmp kopira bajtove iz jednog stringa u drugi dok u prvom stringu ne naidje na \0; a kompajler sam odradi da se i gg[1024] i "predator"
predaju adrese od njihovog pocetka...

Citat:
ok a koja je razlika izmedju definisanja na staku i u memoriji (data segmentu), zar nije bolje to raditi u memoriji jer je stak ogranicen tj dosta manji od raspolozive memorije, i sta radi kompajler po defaultu, da li stavlja na stak ili ds


Sve zavisi kako ti definises promenljive.Ako su lokalne one idu na stack ako su globalne idu u data semgent programa.Stack ti nije mnogo ogranicen...ja mislim da je oko 0x2000 byte po porgramu ne znam tacno...napravi prost program koji jede stack i kad padne dobio si kranju vrednost ->

Code:

int main(){
 int gg;   <------ neki blizi pocetak;
 void *addr;
  printf("%p\n",&gg);
  for (;;){
       printf("%p\n",addr);
       _asm__("subl $0x1,%%esp \n"
                   "movl %%esp,%0 \n":"=r"(addr));
  }
}


i saces imati ceo stack koji se smanjuje dok ne naletis na SIGSEGV pa oduzmi od prve vrednosti poslednju i to je to:o)

Inace stack je veoma dobar i koristan sa njim mozes mnoooogo stvari da uradis...recimo sa funkcijom alloca() alociras podatke na stacku(kao malloc za heap) i kad zavrsis sa funkcijom u kojoj je alloca pozvano nemoras da pozivas free() jel se meorija sama vraca stacku(zbog onog prolog i epilog(valjda se vako zove) :o))
 
Odgovor na temu

[es] :: C/C++ programiranje :: strukture

[ Pregleda: 4001 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.