Segitséget szeretnék kérni, C nyelv?
Persze, szívesen segítek.
Feladattól bonyolultságtól függően 5,000-50,000 az ára.
Ha már ezek az alap feladatok sem mennek önállóan, akkor 1-2 féléven belül ki fogsz bukni a mérnökinfóról. Annyi az egész, hogy gondolkodni kéne és nem meglévő kódokat olvasgatni.
Szomorú, de ez az igazság.
Az a 10 perc kerül neked 5-50 ezer forintba.
Kereslet-kínálat.
Ebben a témában a stackoverflow.com a hivatalos.
A pointerekről
Képzeld el a memóriát, mint egy sötét zsákot, benne a változók értékeik össze-vissza szét vannak szórva. Mindnek megvan a saját helye, amihez tartozik egy cím, ami alapján meg lehet találni.
Egy pointer egy változónak csakis ezt a címét tárolja magában, így az adott változó helyére Mutat (angolul "Point" ige) a memóriában.
Kb mint egy nyíl, úgy el lehet képzelni.
Például
int a = 3; // egy egyszerű szám
int *p; // és egy pointer
p = &a;
A & a címképző operátor, ezzel kérjük ki 'a' változó címét, és ezt a címet odaadjuk 'p' pointernek
azaz most mondjuk meg neki,hol lakik a memóriában 'a' változó
Innentől kezdve, a 'p' pointerrel kiolvashatjuk 'a' változó értékét:
printf("%d", *p);
De 'p' pointerrel meg is tudjuk változtatni 'a' változó értékét, ha akarjuk:
*P = 5;
Ha kiíratjuk 'a' változót, akkor már 5-öt kell látnunk:
printf("%d", a);
Ennyi a lényeg, ha egy "sima" változóról szól a dolog.
Kicsit más a helyzet a tömböknél.
A tömbökről
A tömbökről azt kell tudni, hogy nekik az elemek nem szétszórva, hanem egymás után sorban vannak.
Úgy működik a dolog, hogy a program csak a 0. elem címét ismeri. Ha egy tömb egy sokadik elemét kérjük, azt a program úgy találja meg a memóriában, hogy a tömb 0. elemétől lépeget odáig.
Például
int t[] = {3, 6, 2, 7, 5};
// egy egyszerű tömb, 5 db elemmel
int x; // és egy egyszerű változó
A tömbben:
3 = a 0. elem azaz = t[0]
6 = az 1. elem azaz = t[1]
2 = a 2. elem azaz = t[2]
7 = a 3. elem azaz = t[3]
5 = a 4. elem azaz = t[4]
x = t[3];
Így 'x' változó értêke 't' tömb 3. eleme lesz, azaz 7
Ez a 3. elem a 0.-től 3 lépésnyire van: 0. -> 1. -> 2. -> 3.
És a pointerek
int *p;
p = &t;
Nem kell megmondani, hányadik elem.
printf("%d", *p);
A 3-mas számnak, azaz a tömb 0. elemének az értékének kellene megjelennie, mert 'p' pointer azt a címet kapta meg, amit a program ismer: azaz a 0. eleméét.
A tömb többi eleme
Őket is megtaláljuk, csak nekünk kell lépegetni a memóriában:
x = *(p+1);
Így a 6-os számot, azaz a tömb 1. elemét kapjuk, mert 1 lépésre van a 0.-től: 0. -> 1.
x = *(p+2);
A tömb 2. elemét kapjuk, mert 2 lépésre van a 0.-tól.
És így tovább.
Görgess lejjebb, ha sietsz
Az int (angolul "integer", egész szám ) típusú változók értékei 4 bájton tárolódnak, azaz 4 bájtnyi "hosszúak". 1 lépés int-eknél így 4 bájtnyi ugrást ér a memóriában.
Ha félreszámoltam, elírtam javótsatok ki, belezavarodtam
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!