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?
@#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ő.
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).
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.
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.
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;
}
}
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!