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
 11/16 A kérdező kommentje:
Akárhányszor futtatom a programot, mindig üres string lesz a kiírt érték.
2016. ápr. 30. 16:52
 12/16 anonim ***** válasza:

@#10:

Kösz elolvastam. Úgy tűnik egy egyszerű félreértés ki mit nevez deklarálásnak és definiálásnak. Sajnos sok helyen ellentmondó információkat találtam erről, de a lényegen azaz a Kérdező kérdésén ez semmit sem változtat, ezért felesleges volt belekötni is.


@Kérdező:

Attól hogy újrafuttatod, a program működése nem fog megváltozni. Készíts egy másik programot, amiben máshogy helyezkedik el a memóriaszemét. Itt egy példa:


* * * *


#include <iostream>


char foo() {

char a;

return a;

}


char bar() {

char b = 'x';

return b;

}


int main() {

bar();

std::cout << foo() << std::endl;

return 0;

}


* * * *


A program valószínűleg azt fogja kiírni hogy 'x'. A bar() futása során a memóriában maradt egy 'x' és a foo() függvény "a" változója pont oda került ahol a bar() függvény "b" változója volt korábban a memóriában. Persze ez fordító függő.

2016. ápr. 30. 17:17
Hasznos számodra ez a válasz?
 13/16 anonim ***** válasza:

Nincs itt semmi félreértés, C-ben eléggé egyértelmű, hogy mi definíció és mi deklaráció (szabványban is ez használatos).


Azon lehet vitatkozni, hogy mennyire volt fontos ebbe belekötni, általában semennyire, itt volt egy kicsike értelme, mivel alapvetően egy változó memóriaterületéről/annak inicializációjáról szól a kérdés (részben).


Kérdező: kérlek, rakd fel valahova a kódot (pastebin), úgy könnyebb lesz (akármilyen rövid).

2016. máj. 1. 14:41
Hasznos számodra ez a válasz?
 14/16 A kérdező kommentje:

A kódot?

Konkrétan ennyiről van szó.


#include <iostream>

using namespace std;


int main () {

int b;

char c;

cout << b << endl << c << endl;

return 0;

}


És az volt a kérdésem, hogy a c változó értéke miért mindig '' (üres string) lesz, miközben az int esetén kiírja a program azt, ami épp akkor ott van a memóriában, intként értelmezve.

2016. máj. 1. 15:19
 15/16 anonim ***** válasza:

Röviden magyarul: nem meghatározott az értéke amennyiben nincs inicializálva.


Hosszabban angolul, C++ standardból idézve:


"When storage for an object

with automatic or dynamic storage duration is obtained, the object has an indeterminate value, and if

no initialization is performed for the object, that object retains an indeterminate value until that value is

replaced"


A te példád az automatic storage durationba esik bele.

2016. máj. 1. 18:58
Hasznos számodra ez a válasz?
 16/16 anonim ***** válasza:

Akkor legyen ez, jó?


#include <iostream>


int main() {

char t[5];

char c;

for(int i=0; i<5; ++i) {

std::cout << i << ": " << (int)t[i] << '\n';

}

std::cout << "c: " << (int)c;

return 0;

}

}

2016. máj. 2. 10:55
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!