Kezdőoldal » Számítástechnika » Programozás » Miért van az, hogy C++-ban,...

Miért van az, hogy C++-ban, ha kiíratok valamilyen szám változó értékét úgy, hogy nem adtam meg neki kezdőértéket, és a felhasználótól sem kértem be, akkor a kiírt érték valamilyen szám lesz?

Figyelt kérdés
...viszont ha ugyanezt megcsinálom mondjuk egy karakter vagy egy string változóval, akkor csak egy üres string?

2016. ápr. 30. 14:20
1 2
 1/16 A kérdező kommentje:
(Nem fért ki egybe a kérdés. Igazából ... utáni rész okára lennék kíváncsi.)
2016. ápr. 30. 14:33
 2/16 anonim ***** válasza:

A szám (char, short, int, float, double, stb. azaz a primitív típusok) deklarációnál csak memóriát foglal magának, értéket nem állít be. Értéke az a memóriaszemét lesz, ami véletlenül pont azon a memóriaterületen volt ahova a program memóriát foglalt a változónak.


A string egy osztály, nem primitív típus, aminek a default konstruktora egy üres strinet hoz létre. Tehát amikor létrehozol egy stringet, lefut egy kód ami beállítja a string értékét és hosszát.


A char karakter szintén szám, amíg nem definálod bármi lehet az értéke.

2016. ápr. 30. 15:28
Hasznos számodra ez a válasz?
 3/16 anonim ***** válasza:

Ezt memóriaszemétnek nevezik.

Egy definiàlt vàltozó màr létezik ezért kell hogy legyen valahol a memóriàban és ha ott előzőleg ott maradt pl egy 5 szàm akkor az lesz az alapértelmezett értéke.

2016. ápr. 30. 15:29
Hasznos számodra ez a válasz?
 4/16 anonim ***** válasza:
Még annyit hogy egy static láthatóságú vagy globális szkópban deklarált primitív változó mindig 0 kezdőértéket kap. Ez fordítási időben megtehető, nem lassítja a program futását.
2016. ápr. 30. 15:32
Hasznos számodra ez a válasz?
 5/16 anonim ***** válasza:
73%

"deklaràciónàl csak helyet foglal magànak"

Ez nem igaz egy vàltozó ami deklaràlt nem létezik még csak a forditóval tudassuk,hogy lesz egy ilyen tipusú és nevű vàltozó valahol. Minimum definiàltnak kell lennie ahhoz hogy létezhessen.

Ki is próbàlhatod ha gondolod.

extern int a // Deklaràció

Utànna pedig próbàld ki íratni a memóriacímét.Nem fog menni mert nem létezik.

2016. ápr. 30. 15:34
Hasznos számodra ez a válasz?
 6/16 anonim ***** válasza:
Előző vagyok szal kérdező alapértelmezetten inicializàltak lesznek a bizonyos definiàlt vàltozóid a régebben létrehozott vàltozók egy olyan értékével amelyet felszabadítàsuk előtt tartalmaztak.
2016. ápr. 30. 15:43
Hasznos számodra ez a válasz?
 7/16 A kérdező kommentje:
Amit továbbra sem értek, hogy miért lesz üres szöveg értéke egy karakter változónak, ha nem adok neki értéket, és úgy akarom kiíratni az értékét.
2016. ápr. 30. 16:24
 8/16 anonim ***** válasza:
Melyik agyatlan pontozta le az #5-ik választ?
2016. ápr. 30. 16:27
Hasznos számodra ez a válasz?
 9/16 anonim ***** válasza:
9%

@#5:


"extern int var" azt mondja meg hogy majd a linker találni fog egy "int var" változót az egyik fordítási egységben. Nem azt hogy deklarálni akarsz egy ilyen változót. Ezt mi sem egyszerűbb bizonyítani mint hogy megpróbálsz adni neki egy értéket:


extern int var;

var = 5;


Ha igazad van akkor a var = 5 foglalni fog magának területet és beírja az 5-öt oda.


Ha nincs igazad akkor a var nem létezik mert nincs még deklarálva és a var = 5 nem fog tudni lefutni, mert a var nincs deklarálva még.


* * * *


Az deklarációnál létrehozzuk a változót és felkészítjük a használatra, csak éppen nem feltétlenül adunk neki értéket. Ez egy lokális változónál a stack mutató (ESP regiszter x86-on) csökkentését jelenti, heap esetében pedig a területet írhatóvá teszi (implementáció függő) azaz lefoglalja. Ha ez nem lenne akkor definiálásnál azaz az első értékadásnál elszállna a program SEGFAULT-al.


Egy deklarált de nem definiált változónak is van memóriacíme, és senki nem fog arra a címre írni, ebben biztos lehetsz. Mégpedig azért nem mert le van foglalva.



@Kérdező:


Ha egy char típusú változónak amit nem definiáltál 0 az értéke, az csak véletlen. Éppen 0 volt azon a memóriaterületen.

2016. ápr. 30. 16:29
Hasznos számodra ez a válasz?
 10/16 anonim ***** válasza:
Javaslom tanulmányozásra a tisztánlátás végett: [link]
2016. ápr. 30. 16:35
Hasznos számodra ez a válasz?
1 2

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!