Kezdőoldal » Számítástechnika » Programozás » C++-ban mik a lehetőségek egy...

C++-ban mik a lehetőségek egy egyszerű tömb méretének a lekérdezésére?

Figyelt kérdés
Vagy érdemesebb inkább vectort/listet használni?

2018. okt. 3. 10:27
 1/9 anonim ***** válasza:
Tömb méretének lekérdezésére nincs lehetőség. Célszerű az átalad említett STL konténereket használni. Ha mégis tömböt adsz át egyik függvényből a másiknak, akkor a méretét mindig meg kell adnod paraméterként, hogy tudd, mekkora a tömb.
2018. okt. 3. 10:55
Hasznos számodra ez a válasz?
 2/9 A kérdező kommentje:

Sizeof operátorral nem lehet kísérletezgetni? Vagy az csak statikus tömböknél jó?

int tomb[] = {1,2,3};

std::cout << sizeof(tomb)/sizeof(int);

2018. okt. 3. 11:08
 3/9 A kérdező kommentje:

Ez pl 2-t ír ki eredményként:

int * tomb;

tomb = new int[4] {1,2,3,4};

std::cout << sizeof(tomb)/sizeof(int);

(rextester.com-on tesztelve)

2018. okt. 3. 11:11
 4/9 anonim ***** válasza:
A sizeof egészen addig működik, ameddig a tömböt nem adod át egy függvénynek, mivel ott a sizeof a tömb első elemére mutató pointer méretét fogja visszaadni.
2018. okt. 3. 11:14
Hasznos számodra ez a válasz?
 5/9 anonim ***** válasza:

A new[] operátor szintén pointert ad vissza.

[link]

2018. okt. 3. 11:30
Hasznos számodra ez a válasz?
 6/9 A kérdező kommentje:

Valóban. Ez is 2-t ír ki (8/4).


#include <iostream>

void valami(int a[]) {

std::cout << sizeof(a)/sizeof(int);

}

int main() {

int a[] = {1,2,3,4,5,6};

valami(a);

}

2018. okt. 3. 11:34
 7/9 anonim ***** válasza:

Ez meg már 6-ot ír ki :D


#include <iostream>


template<std::size_t N>

void valami(int (&a)[N]) {


std::cout << sizeof(a)/sizeof(int);


}


int main() {


int a[] = {1,2,3,4,5,6};


valami(a);


}

2018. okt. 3. 12:40
Hasznos számodra ez a válasz?
 8/9 anonim ***** válasza:
Az STL rendelkezdik egy std::array tárolóval, használd azt.
2018. okt. 4. 14:22
Hasznos számodra ez a válasz?
 9/9 A kérdező kommentje:

//működik:

int tomb[] = {1,2,3}

std::cout << sizeof(tomb)/sizeof(int);



//nemműködik

int * tomb;

tomb = new int[4] {1,2,3,4};

std::cout << sizeof(tomb)/sizeof(int);


//nemműködik

#include <iostream>

void valami(int a[]) {

std::cout << sizeof(a)/sizeof(int);

}

int main() {

int a[] = {1,2,3,4,5,6};

valami(a);

}


A sizeof egészen addig működik, ameddig a tömböt nem adod át egy függvénynek, mivel ott a sizeof a tömb első elemére mutató pointer méretét fogja visszaadni.


//működik

#include <iostream>


template<std::size_t N>

void valami(int (&a)[N]) {

std::cout << sizeof(a)/sizeof(int);

}


int main() {

int a[] = {1,2,3,4,5,6,7, 8};

valami(a);

}

2019. máj. 6. 12:55

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!