ubuntuusers.de

Wieviele Elemente hat ein Array? (C++)

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Ninnghizidha

Avatar von Ninnghizidha

Anmeldungsdatum:
16. Mai 2005

Beiträge: 254

Wohnort: Wien / Hannover

... weil ich gerade drandenke ...

Hallo!

Hat jemand eine Ahnung, wie ich in C++ von diesen Arrays die Länge feststelle?

template <class K, class V> 
MultiHashTable<K,V>::MultiHashTable(K keys[], V values[]):c_hashtablesize(65536){
        
        // aus wie vielen Elementen besteht das Array "keys"?
        // aus wie vielen Elementen besteht das Array "values"?
        // Fragen über Fragen ...

}

Ninnghizidha.

MrMind

Avatar von MrMind

Anmeldungsdatum:
25. Mai 2005

Beiträge: Zähle...

Wohnort: Odw.

Ich meine ich hätte mal gelesen, das man mit sizeof() dynamisch während der Laufzeit die größe des Arrays bestimmen kann.

In meinem Buch habe ich ähnliches wie bei deinem Template gesehen, doch die arbeiten mit statischen angaben (scheiß Beispiele immer 😉 ).

Mfg
MrMind

bitbieger

Avatar von bitbieger

Anmeldungsdatum:
24. Januar 2005

Beiträge: 85

Wohnort: NRW

Das ist in diesem Fall IMO nicht ermittelbar, sofern nicht das letzte Element des jeweiligen Arrays NULL ist. In dem Fall könntest du durchzählen, bis du auf NULL stößt. Da du den Speicher für die Arrays dynamisch allozieren kannst, ist sizeof() nicht in der Lage die korrekte Größe zu ermitteln.

Bsp:

#include <stdio.h>

int getSize(int arr[]) {
    return sizeof(arr)/sizeof(int);
}

int main(void) {

    int *array = (int*)malloc(1024 * sizeof(int));
    printf("size: %d\n",  getSize(array));
    return 0;
} 

ergibt: size: 1

uplift

Anmeldungsdatum:
13. Mai 2005

Beiträge: Zähle...

Wie wärs mit strlen? Ich hab da was von dynamisch und Laufzeit gelesen, deswegen weiss ich nich ob's nich vielleicht zu einfach wäre, aber versuchen kann ich's ja mal ☺

steffmeister

Avatar von steffmeister

Anmeldungsdatum:
5. April 2005

Beiträge: 403

Wohnort: St. Valentin (Ö)

mit strlen gehts sicher auch nicht, weil des gibt ja nur die anzahl zeichen bis (exkl) nullterminator ('\0') zurück (also die Länge eines STRings)...

könntest aber trotzdem verwenden, nur:
* brauchst am ende einen nullterminator
* du musst sicherstellen, dass dazwischen nirgends ein nullterminator ist, sondern eben nur am ende

😉

Ninnghizidha

(Themenstarter)
Avatar von Ninnghizidha

Anmeldungsdatum:
16. Mai 2005

Beiträge: 254

Wohnort: Wien / Hannover

Oh, jetzt hätte ich diesen Thread fast vergessen ...

Also, erstmal danke für eure Antworten. Wenigstens bin ich mir jetzt relativ sicher, dass es nicht wirklich abprüfbar ist, und ich habe den Weg eingeschlagen, das letzte Arrayelement mit "0" (nicht erlaubter key) zu terminieren ... zwar auch nur eine halbe Lösung, aber es geht wenigstens. ☺

.. aber ich werde es noch mit NULL testen ☺
[edit].. nein, geht auch nicht ... eine Terminiierung voraussetzen ist wohl das einzig brauchbare... [/edit]

Danke schön,
liebe Grüße,
Ninnghizidha

bitbieger

Avatar von bitbieger

Anmeldungsdatum:
24. Januar 2005

Beiträge: 85

Wohnort: NRW

Hi,

NULL ist gleich 0. ☺
Alternativ kannst du doch auch einfach die Länge der Arrays mit übergeben (KISS = Keep It Simple and Stupid). Ansonsten schau dir mal die STL-Implementierung von map<> an, vielleicht kannst du dir da was abgucken.

cu,
bitbieger

spaceman

Anmeldungsdatum:
1. Mai 2005

Beiträge: 28

Vielleicht solltest wenn möglich mit dynamischen Datentypen statt mit arrays arbeiten!

m44

Anmeldungsdatum:
16. Mai 2005

Beiträge: 74

Was beweist, wie dumm die Sprache C eigentlich ist. ☹

Dakuan

Avatar von Dakuan

Anmeldungsdatum:
2. November 2004

Beiträge: 6500

Wohnort: Hamburg

Eine Sprache ist nie dumm...
Dakuan

Ninnghizidha

(Themenstarter)
Avatar von Ninnghizidha

Anmeldungsdatum:
16. Mai 2005

Beiträge: 254

Wohnort: Wien / Hannover

bitbieger:
NULL kann nicht 0 sein ... wenn das so wäre, wäre das pervers.
.. und übergeben kann ich die länge des Arrays nicht, da diese Funktion Teil einer Schnittstelle ist ... ich darf sie nur programmieren, nicht aber ändern. STL? map<>? Werd ich mal ☺

spaceman:
Tut nichts zur Sache.

Ninnghizidha.

m44

Anmeldungsdatum:
16. Mai 2005

Beiträge: 74

Dakuan hat geschrieben:

Eine Sprache ist nie dumm...
Dakuan

Jajaja... Stimmt ja irgendwie. Aber Programmierung mit C ist so kontra-intuitiv. Aber C will ja auch gar nicht intuitiv sein, sondern ist mehr ein Bild der "Denkweise" eines Rechners. Was andersherum ja vieles sehr vereinfacht - um nicht zu sagen erst ermöglicht.

Trotzdem, außerhalb von betriebssystemnahen Anwendungen würde ich nicht freiwillig C programmieren.

blackbird Team-Icon

Avatar von blackbird

Anmeldungsdatum:
19. November 2004

Beiträge: 3397

Wohnort: Hermagor, Kärnten - Österreich

m4$$4 hat geschrieben:

Dakuan hat geschrieben:

Eine Sprache ist nie dumm...
Dakuan

Jajaja... Stimmt ja irgendwie. Aber Programmierung mit C ist so kontra-intuitiv. Aber C will ja auch gar nicht intuitiv sein, sondern ist mehr ein Bild der "Denkweise" eines Rechners. Was andersherum ja vieles sehr vereinfacht - um nicht zu sagen erst ermöglicht.

Trotzdem, außerhalb von betriebssystemnahen Anwendungen würde ich nicht freiwillig C programmieren.

Der Code sieht aber nach C++ aus. Und ich finde die Sprache intuitiv 🙄

bitbieger

Avatar von bitbieger

Anmeldungsdatum:
24. Januar 2005

Beiträge: 85

Wohnort: NRW

Ninnghizidha hat geschrieben:

bitbieger:
NULL kann nicht 0 sein ... wenn das so wäre, wäre das pervers.

/usr/include/linux/stddef.h:

#undef NULL
#if defined(__cplusplus)
#define NULL 0
#else
#define NULL ((void *)0)
#endif

😀

Ninnghizidha

(Themenstarter)
Avatar von Ninnghizidha

Anmeldungsdatum:
16. Mai 2005

Beiträge: 254

Wohnort: Wien / Hannover

Ist ja erstaunlich .... 😲

Antworten |