Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

[C] Funktionen / aufgerufene Funktion ändert Daten

Empfohlene Antworten

Veröffentlicht

Hi zusammen,

bin gerade an einer Übungsaufgabe in C, bei der eine Funktion gebraucht wird. Die Funktion übernimmt den Inhalt der Variablen n, ändert ihn in der Funktion und gibt ihn zurück an das aufrufende Hauptprogramm (main). Die Variable gew_mw verursacht, soweit ich beim Debuggen gekommen bin, noch keine Probleme. Es geht hier also um n.

Der gesamte Programmcode in C ist als txt-Datei dabei.

Aufruf der Funktion aus dem Hauptprogramm:

funktion_1(&gew_mw, &n);

Die Funktion beginnt:

void funktion_1 (double *gew_mw, int *n)

Beim Durchgehen im Einzelschritt meckert der Debugger von MS Visual C++ Express in der Funktion bei

(...)

do {

*n++;

printf("%i . Wertepaar:\t", *n);

(...)

in einem Fenster "unbehandelte Ausnahme ... Zugriffsverletzung".

Das Fenster "lokal" mit den Variablen-Inhalten etc. zeigt für

n "Fehler: Ausdruck kann nicht ausgewertet werden".

Ich vermute falscher Aufruf / Übergabe usw. der Variablen-Inhalte...

Hinweise willkommen. :confused:

Ciao, Andreas

Programmcode_4-1.txt

*n++;
Das hier tut nicht, was du erwartest. Der Inkrementoperator bindet stärker als der Dereferenzierungsoperator. Hier wird also zuerst der Zeiger n inkrementiert, und dann der inkrementierte Zeiger dereferenziert (was im allgemeinen keinen Nebeneffekt hat, aber bei ungültigen Zeigern undefiniertes Verhalten bewirkt).

Du willst erst dereferenzieren und dann inkrementieren, also musst du Klammern benutzen:

(*n)++;
Noch besser wäre, wenn du dir gleich angewöhnst, Prefix statt Postfix zu benutzen:
++*n;

Da hast du das Problem nicht ;)

übergieb deiner funktion_1 Referenzen :)
Referenzen gibt's in C nicht.
  • 1 Monat später...
  • Autor

Moin Klotzkopp,

ja danke, die Klammer war's! ;-)

Darauf wurde im Buch nicht hingewiesen.

Prefix statt Postfix habe ich auch probiert ... geht! Davon wußte ich noch nicht. Wieder was gelernt.

Schönen Tach noch!

Ciao, Andreas

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.