Die Mathe-Redaktion - 22.02.2018 11:34 - Registrieren/Login
Auswahl
ListenpunktHome
ListenpunktAktuell und Interessant ai
ListenpunktArtikelübersicht/-suche
ListenpunktAlle Links / Mathe-Links
ListenpunktFach- & Sachbücher
ListenpunktMitglieder / Karte
ListenpunktRegistrieren/Login
ListenpunktArbeitsgruppen
ListenpunktSchwätz / Top 15
ListenpunktWerde Mathe-Millionär!
ListenpunktFormeleditor fedgeo
Aktion im Forum
Suche
Stichwortsuche in Artikeln und Links von Matheplanet
Suchen im Forum
Suchtipps

Bücher
Englische Bücher
Software
Suchbegriffe:
Mathematik bei amazon
Naturwissenschaft & Technik
In Partnerschaft mit Amazon.de
Kontakt
Mail an Matroid
[Keine Übungsaufgaben!]
Impressum

Bitte beachten Sie unsere Nutzungsbedingungen, die Distanzierung, unsere Datenschutzerklärung und
die Forumregeln.

Sie können Mitglied werden oder den Newsletter bestellen.

Der Newsletter Okt. 2017

Für Mitglieder
Mathematisch für Anfänger
Wer ist Online
Aktuell sind 651 Gäste und 24 Mitglieder online.

Sie können Mitglied werden:
Klick hier.

Über Matheplanet
 
Zum letzten Themenfilter: Themenfilter:
Matroids Matheplanet Forum Index
Moderiert von matph
Informatik » Programmieren » C++: Array als Funktionsparameter
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule C++: Array als Funktionsparameter
james11235
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 07.10.2016
Mitteilungen: 81
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2018-01-16


Hallo

Hier meine Frage: Wenn ich in c++ eine Funktion habe zb void funkt(int a){a++} und diese Aufrufe zb int b=5; funkt(b); dann ändert sich ja der Wert der Variable b nicht oder da beim Funktionsaufruf zuerst eine Funktionsvariable x=b; gesetzt wird und dann x++;. Nun die Frage: Wenn ich eine Funktion habe die als Argument ein array hat zb void funkt(int arr[10]){arr[5]=0;} und diese Aufrufe was passiert dann? Eigentlich würde dann doch am Anfang eine Funktionsinterne Variable x=arr gesetzt werden oder? Aber das funktioniert ja nicht in c++...



  Profil  Quote  Link auf diesen Beitrag Link
StrgAltEntf
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 19.01.2013
Mitteilungen: 3858
Aus: Milchstraße
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2018-01-16


Hallo james11235,

am schlausten probierst du so etwas einfach aus. Tatsächlich: Wenn b ein array ist und du funkt(b) aufrufst, ist anschließend b[5] Null.



  Profil  Quote  Link auf diesen Beitrag Link
darkhelmet
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 05.03.2007
Mitteilungen: 2181
Aus: Bayern
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, eingetragen 2018-01-16


2018-01-16 13:44 - james11235 im Themenstart schreibt:
Eigentlich würde dann doch am Anfang eine Funktionsinterne Variable x=arr gesetzt werden oder? Aber das funktioniert ja nicht in c++...

Wieso nicht? Ob deine Syntax 100% korrekt ist, weiß ich nicht. Aber im Prinzip ist das genau das, was passiert. Die Variable hat den Typ int*, also pointer auf int. Und deshalb macht die Funktion auch was, im Gegensatz zur ersten. Sie hat nämlich keinen Wert übergeben bekommen, sondern eine Adresse im Speicher. An dieser Adresse (bzw. "5 weiter") setzt sie im Speicher einen Wert auf 0.

Die erste Funktion kriegt nur den Wert 5 (der eine Kopie der 5 in der Variablen b ist), macht daraus eine 6 und verwirft diese wieder, weil es keine Zuweisung und kein Return-Statement gibt.

[Die Antwort wurde vor Beitrag No.1 begonnen.]



  Profil  Quote  Link auf diesen Beitrag Link
james11235
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 07.10.2016
Mitteilungen: 81
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, vom Themenstarter, eingetragen 2018-01-16


" Die Variable hat den Typ int*" Das verstehe ich nicht ganz...die Variable ist doch vom typ int array?



  Profil  Quote  Link auf diesen Beitrag Link
ligning
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 07.12.2014
Mitteilungen: 1865
Aus: Berlin
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, eingetragen 2018-01-16


Hallo,

wenn für einen Funktionsparameter ein Array-Typ angegeben ist, bedeutet das, dass es einen Zeigertyp hat. Die folgenden Arten, deine Funktion zu definieren sind äquivalent:
void funkt1(int arr[10]) { arr[5]=0; }
 
void funkt2(int arr[]) { arr[5]=0; }
 
void funkt3(int *arr) { arr[5]=0; }

(Das sollte einen nicht dazu verleiten zu glauben, dass Arrays Zeiger sind. Diese Regel gilt nur bei Funktionsparametern.)

[Die Antwort wurde nach Beitrag No.1 begonnen.]


-----------------
⊗ ⊗ ⊗



  Profil  Quote  Link auf diesen Beitrag Link
james11235
Aktiv Letzter Besuch: im letzten Monat
Dabei seit: 07.10.2016
Mitteilungen: 81
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, vom Themenstarter, eingetragen 2018-01-16


Also wenn void f(int arr[5]) {arr[3]=10} meine Funktion ist und ich diese Aufrufe mit f(b) wobei b ein Array ist dann passiert intern folgendes:int*x=b;  (x+3)=10;} habe ich das richtig verstanden?

[Die Antwort wurde nach Beitrag No.3 begonnen.]



  Profil  Quote  Link auf diesen Beitrag Link
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 1350
Aus:
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.6, eingetragen 2018-01-16


2018-01-16 14:39 - james11235 in Beitrag No. 5 schreibt:
Also wenn void f(int arr[5]) {arr[3]=10} meine Funktion ist und ich diese Aufrufe mit f(b) wobei b ein Array ist dann passiert intern folgendes:int*x=b;  (x+3)=10;} habe ich das richtig verstanden?



So ähnlich wird das Verhalten sein.
Was intern passiert hängt immer vom Compiler ab und ist daher ohne Kontext selten eine sinnvolle Frage.


Weist man dem Array bspw. einen eigenen Typnamen zu, kann das Verhalten sich durchaus ändern. (probiere es ruhig einmal aus)


-----------------
Why waste time learning when ignorance is instantaneous?
- Bill Watterson -



  Profil  Quote  Link auf diesen Beitrag Link
james11235 hat die Antworten auf ihre/seine Frage gesehen.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2018 by Matroids Matheplanet
This web site was made with PHP-Nuke, a web portal system written in PHP. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]