Kezdőoldal » Számítástechnika » Programozás » Ez így nem jó (pointer c)?

Ez így nem jó (pointer c)?

Figyelt kérdés

#include <stdio.h>


int main(){

int x=5;

int *p;

*p=x;

scanf("%d",p);

printf("%d\n",*p);

return 0;

}


Ha x-et akarom megváltoztatni egy pointer segítségével,akkor írhatom azt,hogy p &x helyett nem,Csak mert nem fut le a program.


2016. okt. 30. 12:52
 1/8 anonim ***** válasza:

int* p = &x ;

*p = 5;

2016. okt. 30. 12:58
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:
P pointered értéke egy memóriaszemét ám.
2016. okt. 30. 12:59
Hasznos számodra ez a válasz?
 3/8 anonim ***** válasza:

*p = x; // p által mutatott címre írja x _értékét_

p = &x; // p mutasson x-re


Az első eset azért is problémás, amit már leírtak, írod a memóriát, de érvénytelen területen (hiszen csak egy x-ed van a memóriában, meg ehhez egy p, de ő egy memóriacímet tárol, tehát egy int-ed van gyakorlatilag).

2016. okt. 30. 13:16
Hasznos számodra ez a válasz?
 4/8 anonim ***** válasza:

Hogy értsd: Először létrehozod a pointert:

int* p;


Ezután a pointerednek meg kell adni a memóriacímet, amire mutasson:

p=&x;


Mint látod, itt nincs *, mert a pointernek magának adom meg az x referenciáját. Eztán tudod p-n keresztül megváltoztatni x értékét:

*p=5;


Itt már van *, mivel itt a pointer által mutatott értéket akarom módosítani.


A deklarálásnál a * jelöli, hogy pointer típusú változót hozol létre, utána viszont a * azt jelöli, hogy a pointer által mutatott memóriacímen levő értéket akarod használni (jelen esetben x értékét), ha simán p-t írsz, akkor pedig magát a pointert, a memóriacímet kapod meg. A fenti programodban a hiba, hogy létrehozod a pointert, de nem mondod meg neki, hova mutasson, jobbára memóriaszemétre mutat. És te ennek a memóriaszemétnek akarod beállítani x értékét (aminek így semmi köze nem lesz x-hez).

2016. okt. 30. 13:20
Hasznos számodra ez a válasz?
 5/8 anonim ***** válasza:

Bocsánat, valszeg ugyanazt fogom leírni, mint fentebb. :)


int x=5; // létrehoz egy változót és beleír 5-öt

int *p; // létrehoz egy pointert, de nem ír bele címet

*p=x; // a p által mutatott helyre(!!) írja az x értékét


De mivel p nem mutat sehova (illetve nem tudjuk, hova mutat), nem szerencsés a mutatott helyre bármit is beírni.

2016. okt. 30. 18:06
Hasznos számodra ez a válasz?
 6/8 A kérdező kommentje:

szóval akkor abból,hogy *p=x nem következik az,hogy p=&x,na mostmár ezt is tudom,beírva egy plusz sorba hogy p=&x egyből lefut rendesen.


kösz a válaszokat

2016. okt. 30. 18:45
 7/8 anonim ***** válasza:

p=&x

Igen, ezzel állítod be, hogy p az x-re mutasson. (Értéket adsz p-nek, érvényes címet írsz bele.) Ezután már dolgozhatsz a p által mutatott adattal. (*p)

2016. okt. 30. 21:18
Hasznos számodra ez a válasz?
 8/8 anonim ***** válasza:

példa, hasraütéses címekkel:

"cím - szimbólum - érték"


int x=5;

"100 - x - 5"


int *p;

"100 - x - 5"

"104 - p - ???"


p=&x

"100 - x - 5"

"104 - p - 100"


*p=x;

Ez már semmi újat nem csinálna, a 100-as címre visszaírja önmagát.

2016. okt. 30. 21:26
Hasznos számodra ez a válasz?

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!