Forum: PC-Programmierung 2dimensionales Array


von C64 (Gast)


Lesenswert?

Hi

Wenn ich ein Array eröffne mit

unsigned char Array[5][5];

ist das dann 5x5 oder 6x6 groß, d.h. wird 0 mitgerechnet?

: Verschoben durch Admin
von Dave (Gast)


Lesenswert?

Hi C64,

das Array ist dann 5x5.

Grüße
Dave

von remmy (Gast)


Lesenswert?

5x5

Index von 0-4

von Severino R. (severino)


Lesenswert?

C64 schrieb:
> Hi
>
> Wenn ich ein Array eröffne mit ...
                     ^^^^^^^

Definieren heisst das, nicht eröffnen.

von Willi S. (Gast)


Lesenswert?

Bei C++ : array[5] --> 0-4 also insgesamt 5 Elemente haben Platz
Bei VB : array(5) --> 0-5 hier haben insgesamt 6 Elemente Platz

Das ist ein wesentlicher Unterschied :-)

Gruß,
Willi

von Random .. (thorstendb) Benutzerseite


Lesenswert?

1
char str[]="Hallo";

wird 5+1 lang, da ein string am Ende mit 0 bzw. dem Zeichen '\0' 
gekennzeichnet wird.

Da ist die Array-Size dann 6. Rückwärts muss man dies beachten, wenn man 
Strings in Arrays schreiben will.


VG,
/th.

von Willi S. (Gast)


Lesenswert?

Die werden auch String-Arrays genannt, obwohl es in C und C++ keinen 
eigenen Datentyp "string" gibt. Das mit der \0 zum Schluss hat einen 
guten Grund. Es gibt einen ganzen Haufen String-Funktionen in C und C++ 
(string.h), die sich nach der 0 am Schluss orientieren. Beispiel: 
"strlen".
Das nur so zur Ergänzung.

lg,
willi

von MeinerEiner (Gast)


Lesenswert?

In VB gibts aber auch die Möglichkeit, array(x TO y) zu schreiben, dann 
sieht man, welche Indizes möglich sind; Also array(5) = array(0 TO 5)

von D. I. (Gast)


Lesenswert?

Willi S. schrieb:
> Die werden auch String-Arrays genannt, obwohl es in C und C++ keinen
> eigenen Datentyp "string" gibt. Das mit der \0 zum Schluss hat einen
> guten Grund. Es gibt einen ganzen Haufen String-Funktionen in C und C++
> (string.h), die sich nach der 0 am Schluss orientieren. Beispiel:
> "strlen".
> Das nur so zur Ergänzung.
>
> lg,
> willi

Mh zumindest in C++ gibts strings ;)

von Christoph P. (cpehonk)


Lesenswert?

Christopher D. schrieb:

> Mh zumindest in C++ gibts strings ;)

Leider aber nicht als Daten-Typ. Der ist erst bei C# eingeführt. C++ 
(speziell MFC) liefert "nur" CString als Klasse.

von Karl H. (kbuchegg)


Lesenswert?

Christoph Pelich schrieb:
> Christopher D. schrieb:
>
>> Mh zumindest in C++ gibts strings ;)
>
> Leider aber nicht als Daten-Typ.

Doch.
std::string

Die STL ist offizieller Bestandteil von C++ und sollte als solcher auch 
verwendet werden.

Wenn du std::string schon nicht kennst, werden dir die Augen übergehen, 
was du sonst noch so alles in der STL verfügbar hast :-)

von P. S. (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:

> Die STL ist offizieller Bestandteil von C++ und sollte als solcher auch
> verwendet werden.

Nichts sollte verwendet werden, nur weil es da ist. Warte mal ab, was 
fuer ein Zeug sie noch in C++ stopfen...

von Karl H. (kbuchegg)


Lesenswert?

Peter Stegemann schrieb:
> Karl heinz Buchegger schrieb:
>
>> Die STL ist offizieller Bestandteil von C++ und sollte als solcher auch
>> verwendet werden.
>
> Nichts sollte verwendet werden, nur weil es da ist.

In Zusammenhang mit der Aussage 'In C++ gibt es keine String Klasse' 
kann man trotzdem aber nur auf die in der STL vorhandene std::string 
verweisen.

Sie ist Bestandteil von C++, ob es einem nun passt oder nicht und somit 
ist die Behauptung einfach nur falsch und zeugt nicht gerade vom Wissen 
darüber, was in C++ alles vorhanden ist und was nicht.

von P. S. (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:

> In Zusammenhang mit der Aussage 'In C++ gibt es keine String Klasse'
> kann man trotzdem aber nur auf die in der STL vorhandene std::string
> verweisen.

Dem Teil habe ich ja auch nicht widersprochen, sondern dem danach.

von Karl H. (kbuchegg)


Lesenswert?

Peter Stegemann schrieb:
> Karl heinz Buchegger schrieb:
>
>> In Zusammenhang mit der Aussage 'In C++ gibt es keine String Klasse'
>> kann man trotzdem aber nur auf die in der STL vorhandene std::string
>> verweisen.
>
> Dem Teil habe ich ja auch nicht widersprochen, sondern dem danach.

Dann habe ich dich missverstanden

Hintergrund: man hört immer wieder die Aussage, dass std::string und 
Konsorten nicht zu C++ gehören, weil die ja in einer STL (igitt) 
residieren und damit nicht zur Sprache gehören. Und das ist ganz einfach 
Unsinn. Mit der gleichen Argumentation könnte man auch sagen, dass 
strcpy nicht zu C gehört, weil es ja schliesslich nicht in der Syntax 
verankert ist.

Oft kann man std::string nicht benutzen. Sei es, weil man ein altes 
Programm pflegen muss oder sich an ein bestimmtes Framework anpassen 
muss oder Schwierigkeiten mit Multithreading hat. Meistens sind es 
einfach nur historische Gründe, warum man mit std::string nicht 
weiterkommt. Wenn man aber diese Zwänge nicht hat, spricht nichts gegen 
std::string. Immer noch besser, als wenn sich Lieschen Müller selbst die 
x-te Stringklasse baut.

von P. S. (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:

> Hintergrund: man hört immer wieder die Aussage, dass std::string und
> Konsorten nicht zu C++ gehören, weil die ja in einer STL (igitt)
> residieren und damit nicht zur Sprache gehören. Und das ist ganz einfach
> Unsinn. Mit der gleichen Argumentation könnte man auch sagen, dass
> strcpy nicht zu C gehört, weil es ja schliesslich nicht in der Syntax
> verankert ist.

Stimmt. Den beiden ist gemeinsam, dass man sie sehr gut von der 
eigentlichen Sprache trennen kann. Und das ist das Schoene an C und C++ 
und das macht sie so geeignet fuer viele Platformen. Der Overhead, den 
man mitschleppen muss, ist extrem klein.

> Wenn man aber diese Zwänge nicht hat, spricht nichts gegen
> std::string. Immer noch besser, als wenn sich Lieschen Müller selbst die
> x-te Stringklasse baut.

Doch sicher gibt es genuegend Gruende fuer so eine Entscheidung. Aber es 
ist wohl muessig, das hier zu diskutieren. Das hatten wir schon und das 
fuehrt leider zu gar nichts.

von Rolf Magnus (Gast)


Lesenswert?

> Meistens sind es einfach nur historische Gründe, warum man mit
> std::string nicht weiterkommt.

std::string hat irgendein compilerspezifisches Encoding und ist in der 
Regel nicht unicode-geeignet. std::wstring ist das teilweise, solange 
man die Strings nicht von irgendwo lesen oder irgendwo hinschreiben 
will. Dann hat man nämlich auch das Problem, daß man zwischen 
irgendeinem compilerspezifischen Encoding und dem externen Encoding 
konvertieren muß. Das ist mit standard-C++ dann recht umständlich und 
wird längst nicht von allen Compilern vernünftig unterstüzt. Die Namen 
der Encodings sind dann dazu auch noch compilerspzifisch,  und eine 
Liste der verfügbaren Encodings kann man in standard-C++ auch nicht 
ermitteln.
Mit einer Kombination aus std::wstring und iconv kann man aber 
einigermaßen arbeiten. Allerdings ist std::wstring nicht gerade 
sonderlich komfortabel. Deshalb gibt es wohl so viele APIs, die ihre 
eigene String-Klasse mitliefern.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.