Arrays multidimensionais
Array 2D built-in é contíguo por linhas em ambos os idiomas.
O que é Arrays multidimensionais?
Array 2D built-in é contíguo por linhas em ambos os idiomas.
Percorra matriz row-major e calcule totais.
Pontos importantes
- Todo ponteiro deve apontar para objeto vivo compatível ou ser null.
- Libere exatamente uma vez cada alocação própria.
- Expresse ownership e const claramente.
Exemplos de código C e C++
main.c
#include <stdio.h>
int main(void) {
int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
for (int row = 0; row < 2; ++row) {
int total = 0;
for (int column = 0; column < 3; ++column) total += matrix[row][column];
printf("row %d=%d\n", row, total);
}
return 0;
}
row 0=6
row 1=15
C++
main.cpp
#include <array>
#include <iostream>
int main() {
std::array<std::array<int, 3>, 2> matrix{{{{1, 2, 3}}, {{4, 5, 6}}}};
for (std::size_t row = 0; row < matrix.size(); ++row) {
int total = 0;
for (int value : matrix[row]) total += value;
std::cout << "row " << row << '=' << total << '\n';
}
}
row 0=6
row 1=15
Comparação entre C e C++
Função C deve conhecer todas as dimensões menos a primeira; std::array preserva dimensões no tipo e oferece at.
C
Ownership e limpeza são convenções manuais.
C++
Containers e RAII codificam ownership e limpeza no lifetime.
Exercícios práticos
Execute as duas versões e modifique-as para observar suas garantias.
- Teste null e falhas de alocação.
- Use AddressSanitizer e UndefinedBehaviorSanitizer.
- Documente o ownership de cada ponteiro.