Il motivo per cui ottieni 48 e non 12 è che sizeOf restituisce la dimensione in byte del tipo:
Yields the size in bytes of the object representation of type.
Sulla tua piattaforma int apparentemente corrisponde a 4 bytes, 4 x 12 = 48
17/11/2023 - Marchetto ha scritto:
Io stò usando c++
Allora usa le feature di C++:
- Invece di usare un "raw array" definisci una classe specifica.
- Utilizza le strutture dati offerte da C++ come std::vector che permettono una facile gestione della memoria pur essendo dinamiche.
- E sopratutto definisci un'interfaccia pubblica minima che si adatti ai tuoi requisiti.
class Matrix {
private:
int rows;
int cols;
std::vector<int> data;
public:
Matrix(int rows, int cols) : rows(rows), cols(cols), data(rows * cols, 0) {}
int getElement(int row, int col) const {
return data[row * cols + col];
}
void setElement(int row, int col, int value) { //Solo se ti serve
data[row * cols + col] = value;
}
int getNumberOfElements() const {
return rows * cols;
}
};
Questo ti permette di:
- Riutilizzare facilmente la funzionalità implementata
- Cambiare facilmente l'implementazione senza modificare il codice che lo usa (se non cambi l'interfaccia pubblica)
- Testare facilmente le funzionalità implementate senza avere dipendenze sul codice più ad alto livello
E se vuoi essere fancy puoi anche aggiungere un costruttore che accetta initialization lists per poter inizializzare i tuoi dati in maniera compatta e pulita:
class Matrix {
[...]
Matrix(int rows, int cols, std::initializer_list<int> values)
: rows(rows), cols(cols), data(rows * cols, 0) {
auto it = values.begin();
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
if (it != values.end()) {
setElement(i, j, *it);
++it;
}
}
}
}
};
int main() {
Matrix red(4, 3, {
1, 1, 1,
1, 1, 1,
1, 1, 1,
1, 1, 1
});
std::cout << "Numero di elementi: " << red.getNumberOfElements() << std::endl;
return 0;
}
Ovvio che se vuoi il numero di colonne o di righe, basta esporre allo stesso modo i 2 valori.