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





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);
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)










A new[] operátor szintén pointert ad vissza.
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);
}





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);
}





//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);
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, 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!