App installieren
How to install the app on iOS
Follow along with the video below to see how to install our site as a web app on your home screen.
Anmerkung: This feature may not be available in some browsers.
Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Anfängerfrage C 2 Arrays übergeben
- Ersteller spitfire2k
- Erstellt am
spitfire2k
Fleet Captain Special
- Mitglied seit
- 13.11.2002
- Beiträge
- 285
- Renomée
- 0
- Standort
- Berlin
- Mein Laptop
- Macbook Pro 13" Early 2011
- Prozessor
- Intel i5 2500k
- Mainboard
- ASRock P67 Pro3 SE
- Kühlung
- Scythe Mugen 2
- Speicher
- 1x 4096MB G.Skill PC3-10666-4GBECO CL7 KIT
- Grafikprozessor
- Club 3D HD5850
- Display
- 24" DELL 1920x1200
- HDD
- OCZ Vertex 2 120GB
- Optisches Laufwerk
- LG GDR8164B
- Soundkarte
- Realtek Onboard
- Gehäuse
- Xigmatek Utgard
- Netzteil
- OCZ Fatal1ty 550W
- Betriebssystem
- Windows 7 64Bit
- Webbrowser
- Mozilla Firefox
Hallo,
1. ich muss für die Uni ein kleines Schiffeversenken für die Konsol programmieren. Mein Problem ist das ich nicht so genau weis wie ich das mit dem Platzieren der CPU-Schiffe machen kann. Programmiersprache ist dabei C, sollte aber eigentlich uninteressant sein, da ich einfach nur ein paar Tipps brauch welche Möglichkeite man so allgemein hat. gelöst!
2. Gibt es in C die Möglickeit an eine Funktion 2 Arrays zu übergeben.
1. ich muss für die Uni ein kleines Schiffeversenken für die Konsol programmieren. Mein Problem ist das ich nicht so genau weis wie ich das mit dem Platzieren der CPU-Schiffe machen kann. Programmiersprache ist dabei C, sollte aber eigentlich uninteressant sein, da ich einfach nur ein paar Tipps brauch welche Möglichkeite man so allgemein hat. gelöst!
2. Gibt es in C die Möglickeit an eine Funktion 2 Arrays zu übergeben.
Zuletzt bearbeitet:
Wie meinst du das?
Per Zufallsgenerator ein Feld auswählen, wenn das Schiff größer als ein Feld ist dann nochmals zufällig die Orientierung festlegen. Prüfen ob das Feld bzw. die Felder noch frei sind oder überhaupt existieren (Spielfeldrand) und Schiff platzieren.
Wenn kein Platz ist solange neues Feld aussuchen, bis halt was passendes gefunden wird.
Per Zufallsgenerator ein Feld auswählen, wenn das Schiff größer als ein Feld ist dann nochmals zufällig die Orientierung festlegen. Prüfen ob das Feld bzw. die Felder noch frei sind oder überhaupt existieren (Spielfeldrand) und Schiff platzieren.
Wenn kein Platz ist solange neues Feld aussuchen, bis halt was passendes gefunden wird.
spitfire2k
Fleet Captain Special
- Mitglied seit
- 13.11.2002
- Beiträge
- 285
- Renomée
- 0
- Standort
- Berlin
- Mein Laptop
- Macbook Pro 13" Early 2011
- Prozessor
- Intel i5 2500k
- Mainboard
- ASRock P67 Pro3 SE
- Kühlung
- Scythe Mugen 2
- Speicher
- 1x 4096MB G.Skill PC3-10666-4GBECO CL7 KIT
- Grafikprozessor
- Club 3D HD5850
- Display
- 24" DELL 1920x1200
- HDD
- OCZ Vertex 2 120GB
- Optisches Laufwerk
- LG GDR8164B
- Soundkarte
- Realtek Onboard
- Gehäuse
- Xigmatek Utgard
- Netzteil
- OCZ Fatal1ty 550W
- Betriebssystem
- Windows 7 64Bit
- Webbrowser
- Mozilla Firefox
Ok, danke.
Habs jetzt so hinbekommen.
Habs jetzt so hinbekommen.
Ge0rgy
Grand Admiral Special
- Mitglied seit
- 14.07.2006
- Beiträge
- 4.322
- Renomée
- 82
- Mein Laptop
- Lenovo Thinkpad X60s
- Prozessor
- Phenom II 955 BE
- Mainboard
- DFI LanParty DK 790FXB-M3H5
- Kühlung
- Noctua NH-U12P
- Speicher
- 4GB OCZ Platinum DDR1600 7-7-7 @ 1333 6-6-6
- Grafikprozessor
- Radeon 4850 1GB
- HDD
- Western Digital Caviar Black 1TB
- Netzteil
- Enermax Modu 525W
- Betriebssystem
- Linux, Vista x64
- Webbrowser
- Firefox 3.5
Zwei Arrays an eine Funktion übergeben geht genauso wie ein einzelnes array auch.
Merke, ein "array" ist nichts anderes als ein Pointer auf eine Speicheradresse.
Wenn du das array deklarierst wird speicher in der entsprechenden größe reserviert und der name des Arrays (die variable) ist nur ein pointer auf den ersten Block.
Wenn du Array[1] aufrufst ist das gleichebdeutend mit *(Array + 1*siezof(Datentyp))
Also er zählt Arrayindex * datentypbreite zum pointer (startadresse) hinzu und landet so im entsprehcenden Array-Element.
Da ein Array also nichts anderes als ein Pointer ist, kannst du davon beliebig viele an eine Funktion übergeben. Theoretisch bis zum Stackoverflow...
Merke, ein "array" ist nichts anderes als ein Pointer auf eine Speicheradresse.
Wenn du das array deklarierst wird speicher in der entsprechenden größe reserviert und der name des Arrays (die variable) ist nur ein pointer auf den ersten Block.
Wenn du Array[1] aufrufst ist das gleichebdeutend mit *(Array + 1*siezof(Datentyp))
Also er zählt Arrayindex * datentypbreite zum pointer (startadresse) hinzu und landet so im entsprehcenden Array-Element.
Da ein Array also nichts anderes als ein Pointer ist, kannst du davon beliebig viele an eine Funktion übergeben. Theoretisch bis zum Stackoverflow...
gruffi
Grand Admiral Special
- Mitglied seit
- 08.03.2008
- Beiträge
- 5.393
- Renomée
- 65
- Standort
- vorhanden
- Prozessor
- AMD Ryzen 5 1600
- Mainboard
- MSI B350M PRO-VDH
- Kühlung
- Wraith Spire
- Speicher
- 2x 8 GB DDR4-2400 CL16
- Grafikprozessor
- XFX Radeon R7 260X
- Display
- LG W2361
- SSD
- Crucial CT250BX100SSD1
- HDD
- Toshiba DT01ACA200
- Optisches Laufwerk
- LG Blu-Ray-Brenner BH16NS40
- Soundkarte
- Realtek HD Audio
- Gehäuse
- Sharkoon MA-I1000
- Netzteil
- be quiet! Pure Power 9 350W
- Betriebssystem
- Windows 10 Professional 64-bit
- Webbrowser
- Mozilla Firefox
- Verschiedenes
- https://valid.x86.fr/mb4f0j
Nicht ganz. Ein Array ist schon noch etwas anderes. Das sollte man nicht vermischen, sonst kann es böse Überraschungen geben, zB:Merke, ein "array" ist nichts anderes als ein Pointer auf eine Speicheradresse.
Code:
sizeof(array)
Code:
sizeof(pointer)
Ein Array kann bei Bedarf allerdings implizit in einen Zeiger auf das erste Element umgewandelt werden. Was bei Parameterübergaben an Funktionen auch gemacht wird.
Wie gesagt, dem ist nicht so. Der Bezeichner eines Arrays ist kein Zeiger. Das ist ein weit verbreiteter Irrglaube. Übrigens, bei einer Deklaration wird noch nichts reserviert. Das geschieht idR bei der Definition.Wenn du das array deklarierst wird speicher in der entsprechenden größe reserviert und der name des Arrays (die variable) ist nur ein pointer auf den ersten Block.
Ge0rgy
Grand Admiral Special
- Mitglied seit
- 14.07.2006
- Beiträge
- 4.322
- Renomée
- 82
- Mein Laptop
- Lenovo Thinkpad X60s
- Prozessor
- Phenom II 955 BE
- Mainboard
- DFI LanParty DK 790FXB-M3H5
- Kühlung
- Noctua NH-U12P
- Speicher
- 4GB OCZ Platinum DDR1600 7-7-7 @ 1333 6-6-6
- Grafikprozessor
- Radeon 4850 1GB
- HDD
- Western Digital Caviar Black 1TB
- Netzteil
- Enermax Modu 525W
- Betriebssystem
- Linux, Vista x64
- Webbrowser
- Firefox 3.5
Naja, dann ist zumidnest mein Informatik-Prof im ersten semester dem Irrglauben auch aufgesessen... aber eigentlich ist das Haarspalterei... in bezug auf die Threadfrage geht das übergeben 2er Arrays via pointer.
Ich denke mich zu erinnern dass e sin späteren C-Versionen auch anere Möglichkeiten gab... aber in dem Borland Turbo C auf 16Bit, mit dem ich C gelernt habe war das AFAIK der einzige Weg.
Da konnte man auch durchaus
int x[10];
und statt x[1] dann *(x+1) schreiben.
Ob das nun implizit umgewandelt wird oder nicht, ist nicht wirklich von belang... man kann solche Spielchen betreiben...
Schön ist es natürlich nicht... und es gibt noch einige andere freveltaten die man begehen kann, aber das macht je gerade die flexibilität von C aus...
Ich denke mich zu erinnern dass e sin späteren C-Versionen auch anere Möglichkeiten gab... aber in dem Borland Turbo C auf 16Bit, mit dem ich C gelernt habe war das AFAIK der einzige Weg.
Da konnte man auch durchaus
int x[10];
und statt x[1] dann *(x+1) schreiben.
Ob das nun implizit umgewandelt wird oder nicht, ist nicht wirklich von belang... man kann solche Spielchen betreiben...
Schön ist es natürlich nicht... und es gibt noch einige andere freveltaten die man begehen kann, aber das macht je gerade die flexibilität von C aus...
gruffi
Grand Admiral Special
- Mitglied seit
- 08.03.2008
- Beiträge
- 5.393
- Renomée
- 65
- Standort
- vorhanden
- Prozessor
- AMD Ryzen 5 1600
- Mainboard
- MSI B350M PRO-VDH
- Kühlung
- Wraith Spire
- Speicher
- 2x 8 GB DDR4-2400 CL16
- Grafikprozessor
- XFX Radeon R7 260X
- Display
- LG W2361
- SSD
- Crucial CT250BX100SSD1
- HDD
- Toshiba DT01ACA200
- Optisches Laufwerk
- LG Blu-Ray-Brenner BH16NS40
- Soundkarte
- Realtek HD Audio
- Gehäuse
- Sharkoon MA-I1000
- Netzteil
- be quiet! Pure Power 9 350W
- Betriebssystem
- Windows 10 Professional 64-bit
- Webbrowser
- Mozilla Firefox
- Verschiedenes
- https://valid.x86.fr/mb4f0j
Jup, man übergibt dann halt noch einen zweiten Parameter. Es gibt noch eine weitere Möglichkeit, indem man alles in einen eigenen Datentyp packt (struct) und dann eine entsprechend initialisierte Instanz davon als Zeiger übergibt. "Echte" Parameterübergabe von Arrays funktioniert nur mit C++ mittels Referenzen.Naja, dann ist zumidnest mein Informatik-Prof im ersten semester dem Irrglauben auch aufgesessen... aber eigentlich ist das Haarspalterei... in bezug auf die Threadfrage geht das übergeben 2er Arrays via pointer.
Ich denke mich zu erinnern dass e sin späteren C-Versionen auch anere Möglichkeiten gab... aber in dem Borland Turbo C auf 16Bit, mit dem ich C gelernt habe war das AFAIK der einzige Weg.
Und als Haarspalterei würde ich das nicht bezeichnen, wenn man sich mit dem ISO Standard auseinandersetzt. Das kann schon mal in Glaubenskriege ausarten. Nicht weniger dramatisch als AMD vas Intel.
Auch hier wird durch den "+"-Operator eine implizite Umwandlung durchgeführt.Da konnte man auch durchaus
int x[10];
und statt x[1] dann *(x+1) schreiben.
Moin gruffi,
ich denke deine auslegungen sind so nicht richtig.
Das array muss im scope der function definiert werden damit sizeof() so arbeitet, siehe auch:
http://en.wikibooks.org/wiki/C_Programming/Pointers_and_arrays#sizeof
Daraus schließe ich, dass nur in dem Scope, in dem die Array-Variable definiert wurde, das sizeof() die korrekte größe liefert - überall anders, egal wie übergeben, NICHT.
Außerdem würde ich jedem der normales C++ programmiert raten, möglichst Container-Klassen zu verwenden. Alles andere ist nur ein schuss ins eigene Bein.
Gruß,
Hannnibal
ich denke deine auslegungen sind so nicht richtig.
Das array muss im scope der function definiert werden damit sizeof() so arbeitet, siehe auch:
http://en.wikibooks.org/wiki/C_Programming/Pointers_and_arrays#sizeof
Daraus schließe ich, dass nur in dem Scope, in dem die Array-Variable definiert wurde, das sizeof() die korrekte größe liefert - überall anders, egal wie übergeben, NICHT.
Außerdem würde ich jedem der normales C++ programmiert raten, möglichst Container-Klassen zu verwenden. Alles andere ist nur ein schuss ins eigene Bein.
Gruß,
Hannnibal
Zuletzt bearbeitet:
gruffi
Grand Admiral Special
- Mitglied seit
- 08.03.2008
- Beiträge
- 5.393
- Renomée
- 65
- Standort
- vorhanden
- Prozessor
- AMD Ryzen 5 1600
- Mainboard
- MSI B350M PRO-VDH
- Kühlung
- Wraith Spire
- Speicher
- 2x 8 GB DDR4-2400 CL16
- Grafikprozessor
- XFX Radeon R7 260X
- Display
- LG W2361
- SSD
- Crucial CT250BX100SSD1
- HDD
- Toshiba DT01ACA200
- Optisches Laufwerk
- LG Blu-Ray-Brenner BH16NS40
- Soundkarte
- Realtek HD Audio
- Gehäuse
- Sharkoon MA-I1000
- Netzteil
- be quiet! Pure Power 9 350W
- Betriebssystem
- Windows 10 Professional 64-bit
- Webbrowser
- Mozilla Firefox
- Verschiedenes
- https://valid.x86.fr/mb4f0j
Mach dir mal keine Sorgen, meine Aussagen sind vollkommen richtig. Diese Diskussion habe ich gefühlt schon hundertmal gesehen.
Es ging doch nicht darum, wo ein Array definiert werden muss, damit sizeof ein entsprechendes Ergebnis liefert. Es ging um den semantischen Unterschied von Arrays und Zeigern.
Es ging doch nicht darum, wo ein Array definiert werden muss, damit sizeof ein entsprechendes Ergebnis liefert. Es ging um den semantischen Unterschied von Arrays und Zeigern.
Ähnliche Themen
- Antworten
- 0
- Aufrufe
- 3K
- Antworten
- 78
- Aufrufe
- 14K
- Antworten
- 0
- Aufrufe
- 1K