008
20.01.2008, 20:09 Uhr
0xdeadbeef
Gott (Operator)
|
Ich denke, der grundlegende Verständnisfehler hier ist der Unterschied zwischen Arrays und Zeigern. Im Gegensatz zu z.B. Java ist ein zweidimensionales Array in C und C++ ein flaches Array. Das bedeutet, zweidimensionale Arrays in C und C++ sehen nicht etwa so aus:
Code: |
------------- | * | * | * | --|---|---|-- | | | | | | ------------- | | \->| | | | | | ------------- | | ------------- | \->| | | | | ------------- | ------------- \->| | | | -------------
|
sondern etwa so:
Code: |
------------------------------------------------- | ------------- | ------------- | ------------- | | | | | | | | | | | | | | | | | | ------------- | ------------- | ------------- | -------------------------------------------------
|
Das ist im Code zum Beispiel so nachvollziehbar:
C++: |
#include <iostream>
int main() { int *p; int x[10]; int y[10][20];
// Plattformabhängig, wahrscheinlich 4, evtl 8 std::cout << "sizeof(int) == " << sizeof(int) << std::endl;
// Plattformabhängig, wahrscheinlich 4, evtl 8 std::cout << "sizeof(p) == " << sizeof(p) << std::endl;
// sizeof(int) * 10 std::cout << "sizeof(x) == " << sizeof(x) << std::endl;
// sizeof(int) * 10 * 20 std::cout << "sizeof(y) == " << sizeof(y) << std::endl;
// sizeof(int) * 20 std::cout << "sizeof(y[0]) == " << sizeof(y[0]) << std::endl; }
|
Ein zweidimensionales Array ist in C schlicht kein Zeigerarray, d.h., wenn du eins haben willst, musst du das von Hand zusammenbauen, in etwa so:
Code: |
------------- | * | * | * | --|---|---|-- | | \-----------------------\ | \-----------\ | | | | --v---------------v---------------v-------------- | ------------- | ------------- | ------------- | | | | | | | | | | | | | | | | | | ------------- | ------------- | ------------- | -------------------------------------------------
|
Das kann dann etwa so aussehen:
C++: |
template<typename t, std::size_t N> t **build_pointer_array(t a[][N]) { t **p = new t*[N];
for(std::size_t i = 0; i < N; ++i) { p[i] = a[i]; }
return p; }
|
-- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |