„Dinamikus adatszerkezetek tutorial” változatai közötti eltérés

Ferrero (vitalap | szerkesztései)
Ferrero (vitalap | szerkesztései)
17. sor: 17. sor:


<pre>
<pre>
  int a,b;
int a,b;
  float f;
float f;
  char *c;  
char *c;  
  /* FONTOS! a pointer is statikus változó, értéke pedig egy memóriacím lehet. Később látni fogjuk. */
/* FONTOS! a pointer is statikus változó, értéke pedig egy memóriacím lehet. Később látni fogjuk. */
</pre>
</pre>


30. sor: 30. sor:


<pre>
<pre>
  int *a;
int *a;
  char *b;
char *b;
</pre>
</pre>


38. sor: 38. sor:
Ha azonban helyes címet adunk neki, akkor használhatóak:
Ha azonban helyes címet adunk neki, akkor használhatóak:
<pre>
<pre>
  int x;
int x;
  int *px = &x;   // itt a 'px' az 'x' változó címét veszi fel. Ilyen komment nincs C89-ben, csak /* */. Ne használjátok prog1-en!
int *px = &x;   // itt a 'px' az 'x' változó címét veszi fel. Ilyen komment nincs C89-ben, csak /* */. Ne használjátok prog1-en!


  int *mp = (int *) malloc ( sizeof(int)*5 ); /* itt kértünk egy olyan memóriaterületet, ahol elfér 5 int. Ennek a címét kapjuk vissza. */
int *mp = (int *) malloc ( sizeof(int)*5 ); /* itt kértünk egy olyan memóriaterületet, ahol elfér 5 int. Ennek a címét kapjuk vissza. */


  int **pp = &mp;   
int **pp = &mp;   
  /* igen, a pointerre mutató pointer... Értéke egy olyan memóriacím, ahol elfér egy pointer. */
/* igen, a pointerre mutató pointer... Értéke egy olyan memóriacím, ahol elfér egy pointer. */
</pre>
</pre>


52. sor: 52. sor:


<pre>
<pre>
  int x= ... ;
int x= ... ;
  mp = mp + x; /* FONTOS! az mp-ben tárolt memóriacím nem x-szel fog növekedni, hanem x * sizeof(*mp)-vel, azaz a mutatott típus méretével. */
mp = mp + x; /* FONTOS! az mp-ben tárolt memóriacím nem x-szel fog növekedni, hanem x * sizeof(*mp)-vel, azaz a mutatott típus méretével. */


  mp++;  /* a pointer tipusa int *, tehát az érték sizeof(int)-tel fog növekedni. Hasznos, ha egy dinamikus tömbben a következő elemre akarunk mutatni. */
mp++;  /* a pointer tipusa int *, tehát az érték sizeof(int)-tel fog növekedni. Hasznos, ha egy dinamikus tömbben a következő elemre akarunk mutatni. */


  char *d= ... ;
char *d= ... ;
  d++; /* a következő karakterre fog mutatni */
d++; /* a következő karakterre fog mutatni */


  d--; /* ugyanez, csak visszafelé */
d--; /* ugyanez, csak visszafelé */
</pre>
</pre>


66. sor: 66. sor:


<pre>
<pre>
  int a=2006 , b;
int a=2006 , b;
  int *p=&a;  // ilyenkor 'p' mutat 'a'-ra
int *p=&a;  // ilyenkor 'p' mutat 'a'-ra
  int b=(*p); // 'b' = a 'p' által mutatott címen lévő érték (2006).
int b=(*p); // 'b' = a 'p' által mutatott címen lévő érték (2006).
  (*p)=26; // a 'p' által mutatott címre beírunk 26-ot.
(*p)=26; // a 'p' által mutatott címre beírunk 26-ot.
</pre>
</pre>


78. sor: 78. sor:
szokott okozni régebbi progrmoknál (itt egyébként épp a long ugyanakkora, mint egy pointer). Garantáltan működő viszont a következő:
szokott okozni régebbi progrmoknál (itt egyébként épp a long ugyanakkora, mint egy pointer). Garantáltan működő viszont a következő:
<pre>
<pre>
  typedef union {
typedef union {
  int n;
int n;
  void* p;
void* p;
  } int_and_ptr;
} int_and_ptr;
</pre>
</pre>