Kezdőoldal » Számítástechnika » Programozás » Van valami olvasmány amit...

Van valami olvasmány amit elolvashatnék, hogy jobban megértsem a pointerek működését C-ben?

Figyelt kérdés

okt. 30. 09:34
1 2 3 4
 21/37 anonim ***** válasza:
3%

"A számítógép memóriájának rekeszei, bájtjai meg vannak számozva. A processzor, amikor szeretne egy változóban tárolt értéket kiolvasni, vagy szeretné módosítani azt, akkor a változó helyét jelző memóriacím (memory address) segítségével hivatkozza meg. Innen tudja a memória, hogy melyik tárolt bájtot kell előszednie, vagy hogy hova tegye a megjegyzendő adatot.


Amikor pointereket használunk a programunkban, tulajdonképp ezekkel a címekkel dolgozunk. A pointer belső ábrázolása egyszerűen a memóriacím."

okt. 31. 11:24
Hasznos számodra ez a válasz?
 22/37 anonim ***** válasza:
79%
Vajon mennyit kell ahhoz inni évtizedeken át, hogy valaki ennyire agyhalott legyen?
okt. 31. 11:33
Hasznos számodra ez a válasz?
 23/37 anonim ***** válasza:
91%

Esettanulmány a pointer castoláshoz (#18-ra direkt válasz), ez szerintem a kérdezőnek is hasznos lehet (és amúgy javaslom az ilyen jellegű kísérletezést, főleg, ha valami nem világos):


#include <stdio.h>


int main(int argc, int argv[]) {


// Pointer cast

double a = 4.3;

double* p = &a;

int* pint = (int*)p;

double* pp = (double*)pint;

printf("Pointer cast: %f\n", *pp);


// Value cast

int aint = (int)a;

double aa = (double)aint;

printf("Value cast: %f\n", aa);


return 0;

}


Jó gyakorlat megtippelni, hogy mit fog kiírni a program, de azért itt hagyom:

Pointer cast: 4.300000

Value cast: 4.000000


Mi erre a magyarázat? Az első esetben a pointert castoltuk - NEM a mögötte levő adatot -, míg a második esetben az adatot castoltuk. Ami ugye double -> int lépésnél információt veszít, amit az utána következő int -> double nyilván nem tud visszaállítani. Ez nem lép fel a pointer castolásnál.

okt. 31. 13:09
Hasznos számodra ez a válasz?
 24/37 anonim válasza:
7%

Sorszámot castolni. Na, az nem semmi.

Tombol az idiotizmus. :(

okt. 31. 20:54
Hasznos számodra ez a válasz?
 25/37 anonim ***** válasza:
90%

24

Nem. Azt a változót castolni, ami tárolja a sorszámot (pointer).

Amúgy a pointerek castolása elég gyakori C-ben (főleg, pl. void*-ról arra, ami neked kell)

okt. 31. 21:11
Hasznos számodra ez a válasz?
 26/37 anonim ***** válasza:
72%

"A számítógép memóriájának rekeszei" -> látszik, hogy a rekesz jutott eszedbe, huzzál ki és a rekeszből vedd ki a következő sörödet. Kb. az való neked nem a memória meg a bájt meg a tudomisén, hogy mi.


Mikor olvastad ezt a sok zöldséget?

nov. 10. 17:40
Hasznos számodra ez a válasz?
 27/37 anonim ***** válasza:
63%

Egy másik kérdés alá írt kommentből kerültem ide.


"A pointerek mibenlétének - azok működésének - megértéséhez a legjobb, ha hardveres oldalról tisztázzuk a dolgokat. A pointer nem más, mint egy memóriacím.


PC-s környezetben a gond általában a pointer aritmetikával szokott lenni, vagy esetenként a címszámítással."


És amikor kitalálták a pointerket a C-ben PC még sehol nem volt (kb. 10 évvel az első PC előtt már létezett C és léteztek pointerek). Hogyan jön ide a címszámítás(?) mi köze a pointerekhez? Te érted amit ide böfögsz, vagy mantrázod továbbra is az elképesztő ostobaságaidat?


A pointer sose volt memória cím. Már csak ha a fogalmat megnézed (és kb. egy kávéscsészénél többet tudsz angolul). A pointer mutatót jelent (angolból magyarra fordítva) a memória cím angolul memory address én nem látok hasonlóságot a két fogalom között. Az, hogy köze van a memóriához és a változókhoz a pointernek az tény, de azt kijelenteni, hogy egy pointer egy memória cím az pont azt jelzi, hogy fogalmad sincs arról, hogy mi a C-ben a pointer. És még itt terjeszted a téves elképzeléseket. Pont ez a téves elképzelés vezet oda (nyilván másnál is olvastam már ezt a tévképzetet), hogy az emberek nem értik meg a pointerek működését és azt, hogy milyen műveleteket és hogyan lehet végezni pointerekkel.


És pont a pointer az ami segít abban C környezetben, hogy platformfüggetlenül tudjunk programot írni és a programozónak ne kelljen ismernie, hogy pontosan hogyan történik a gépben a címfordítás (címszámítás) főleg ha virtuális címzést használ a rendszer (ld. pl. PDP 11 amire az első komolyabb unix és C készült).

nov. 10. 18:20
Hasznos számodra ez a válasz?
 28/37 anonim ***** válasza:
0%

27,

Egy hsz-en belül ennyi marhaságot? :)

hát ez nagyon gáz.

nov. 10. 20:24
Hasznos számodra ez a válasz?
 29/37 anonim ***** válasza:
79%

28

Ne kezd már megint légyszi, múltkor is kiderült, hogy az a "sok marhaság" az valójában 1 dolog, amiben nincs is igazad.

nov. 10. 20:25
Hasznos számodra ez a válasz?
 30/37 anonim ***** válasza:
72%
"Egy hsz-en belül ennyi marhaságot? :)" Kérek szépen tételes cáfolatot illetve világísd meg számomra, hogy mi a marhaság szerinted? De tételesen egyenként. És az "ennyi" miatt legalább három darab felsorolását kérem!
nov. 10. 20:27
Hasznos számodra ez a válasz?
1 2 3 4

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!