Kezdőoldal » Számítástechnika » Programozás » Logikus az, hogy ugyanazzal a...

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]

Figyelt kérdés

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;


2016. júl. 18. 10:54
 1/6 anonim ***** válasza:
Amíg Te érted, hogy mi miért történik, addig természetesen logikus.
2016. júl. 18. 12:50
Hasznos számodra ez a válasz?
 2/6 A kérdező kommentje:

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

2016. júl. 18. 12:56
 3/6 anonim ***** válasza:
Igen, logikus. tomb és ptomb is egy int pointer, tehát logikus, hogy ugyanúgy használod őket. Mindkettő az általad allokált memória terület elejére mutat (csak tomb a stack-en, ptomb pedig a heap-en). Mindkettőn működik a pointer aritmetika is. Talán segít a megértésben ha már tudod ezek mit csinálnak: tomb++, *(tomb++), (*tomb)++, tomb+i, *(tomb+i)
2016. júl. 18. 14:14
Hasznos számodra ez a válasz?
 4/6 A kérdező kommentje:

lehet hülye vagyok, de még nem értem mindig :


a tomb és a &tomb ugyanaz ,de miért ???

2016. júl. 18. 15:37
 5/6 anonim ***** válasza:

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.

2016. júl. 18. 16:09
Hasznos számodra ez a válasz?
 6/6 anonim válasza:
Nem.
2016. júl. 29. 18:14
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!