Logikus az, hogy ugyanazzal a szintaktikával hivatkozok egy statikus és egy dinamikus tömb elemire? C++ ban *tomb vagy *ptomb tomb[i] vagy ptomb[i]
int tomb[10];
int *ptomb = new int[10];
tomb[0]=100;
ptomb[0]=100;
cout << tomb << endl;
cout << &tomb << endl;
cout << *tomb << endl;
cout << "------" << endl;
cout << ptomb << endl;
cout << &ptomb << endl;
cout << *ptomb << endl;
Igen, de ugyanúgy jelölünk 2 különböző dolgot,
azaz a tomb az maga a tömb kezdőcíme, igy logikus a nulladik elem *tomb jelölés
míg ptomb az csak egy memóriahely , amiben benne van a tömb kezdő címe azaz a *ptomb nem logikus jelölés
lehet hülye vagyok, de még nem értem mindig :
a tomb és a &tomb ugyanaz ,de miért ???
A tomb valodi tipusa az int[10], de implicit konvertalodik int* tipusa, kiveve amikor nem.
Ha a konverzio utani dolgokat nezzuk akkor:
tomb: int*
&tomb: int (*) [10], tehat pointer egy int[10] tipusra.
int tomb[10] = {1, 2, 3};
std::cout << tomb[1] << std::endl; // 2
std::cout << (&tomb)[0][1] << std::endl; // 2
std::cout << std::boolalpha << (tomb == &(&tomb)[0][0]) << std::endl; // true
//std::cout << std::boolalpha << (tomb == &tomb) << std::endl; // error: comparison of distinct pointer types ('int *' and 'int (*)[10]')
Egyebkent konnyen belefajdul az ember feje, jobb elkerulni es C++11-es arrayt hasznalni, vagy akarmilyen mas tarolot.
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!