Forum: PC-Programmierung Rückgabewert von funktion


von Julietta O. (eiskalt)


Lesenswert?

Hallo,

ich habe folgenden Code in C geschrieben. Und ich weiß nicht wo mein 
Fehler ist. Wieso ist meine "Ergebnis" nicht wie "erg"? eigenlicht 
sollen die die gleiche Wert haben. Oder täusche ich mich?
______________________________________________________

#include <stdio.h>
#include <stdlib.h>
typedef unsigned char int8;
typedef short int int16;
typedef int int32;

void abc(int32 *data, int32 erg);

int main(){
int32 datain[2];
datain[0] = 0x322e3000;
datain[1] = 0x12345655;
int32 *poiter;
int32 ergebnis;
abc(poiter,ergebnis)
printf("main -- ergebnis:%x\n",ergebnis);

}
void abc(int32 *data, int32 erg){
int16 *ptr1;
int16 *ptr2;
int32 y = *data;
prt1 = (int16*) &y;
ptr2 = (int16*) &erg;
ptr2[1] = ptr1[0];
ptr2[0] = ptr1[1];
printf("void---erg:%x",erg)
}


ERGEBNIS


void---erg:3000322e
main---ergebnis: 8048599
_______________________________________________________



Danke für euere Hilfe

Julietta

von Jojo S. (Gast)


Lesenswert?

merkwürdiger Code... und hier kriegt ptr2 die Adresse einer 
Stackvariablen, das geht nicht gut:
ptr2 = (int16*) &erg;

von Sven P. (Gast)


Lesenswert?

Hat dieser Kode einen konkreten Sinn...?

von Jojo S. (Gast)


Lesenswert?

ich denke das ist eine Hausaufgabe 'schreibe eine Funktion die Hi und Lo 
in einem 32 Bit Wort vertauscht'. Aber das nur Fahrkarten rauskommen 
liegt z.B. noch daran das abc() nicht mal mit initialisierten Werten 
versorgt wird.

von Karl H. (kbuchegg)


Lesenswert?

In dem Code ist so ziemlich alles falsch, was man bei
Parameterübergabe nur falsch machen kann.

Lies dir in deinem Textbuch den Abschnitt noch einmal
durch. Langsam, bedächtig und bei jedem Satz überlegen
was dir der Autor sagen will.

Wenn du einen Pointer hast, dann hats du erst mal nur
eine Variable in der eine Speicheradresse gespeichert
werden kann. Damit man mit einer Pointervariablen sinnvoll
arbeiten kann, muss der Pointer erstmal auf gültigen Speicher
zeigen. Sprich er muss erst mal eine Adresse zugewiesen bekommen.

von Julietta O. (eiskalt)


Lesenswert?

Also das Problem ist nur,dasss ich 2 32 bit habe. Und ich muss LSB von 
dem erste 32 bit und MSB von dem zweite 32 bit in eine neue 32 bit 
kriegen. Habt ihr da einen Vorschlag für mich?

Danke für die Antwort
Julietta

von Stefan B. (stefan) Benutzerseite


Lesenswert?

1
#define erg(lsb, msb) \
2
(((uint32)(msb)) & 0xFFFF0000UL) | (((uint32)(lsb)) & 0x0000FFFFUL)

von Karl H. (kbuchegg)


Lesenswert?

Oder als Funktion:

int32 Stitch( int32 first, int32 scnd )
{
  return ( first & 0xFFFF ) | ( scnd & 0xFFFF0000 );
}


zu verwenden als

  int32 a;
  int32 res

  a = ...

  res = Stitch( a, 87234 );

von Julietta O. (eiskalt)


Lesenswert?

vielen Dank

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.