Frage zu einer C Code Aufgabe?

Das folgende Programm ist lediglich zu Vorführungszwecken gedacht und soll Sie mit Zeigerarithmetik vertraut machen. Gehen Sie daher den Code aufmerksam durch und versuchen Sie die Vorgänge nachzuvollziehen.

Hinweise:

  • Wo werden Adressen oder Werte von Zeigern/Variablen ausgegeben/beeinflusst?
  • Beachten Sie den Platzhalter „%p“, um Adressen von Pointern auszugeben und die notwendige Typenumwandlung der Variablen zu (void*) zu realisieren.
  • Achten Sie auf die Adress-Abstände benachbarter Array Elemente. Was fällt Ihnen auf und wieso verhält es sich so?
  • Es ist ein Befehl im Code enthalten, der nicht wirklich sinnvoll ist, da er keine Aktion ausführt. Welcher ist es? =  

#include <stdio.h>  int main(){//Variablendeklarationint

iAFeld[6] = {3, 7, 7, 9, 6, 9}; int * piZeiger = NULL; int

i = 0;

piZeiger = iAFeld;piZeiger++;.printf ( "Adresse des ersten Arrayelements: %p\n" , ( void )iAFeld); printf ( "Adresse des dritten Arrayelements: %p\n" , ( void )&iAFeld[2]); printf ( "Wert des Zeigers: %p\n\n" , ( void *)piZeiger); .//Ausgabe des Ausgangsarraysfor

(i = 0; i < 6; i++) printf ( "%i " ,iAFeld[i]); printf ( "\n" ); .//1. Schritt*(++piZeiger) = iAFeld[4];.//Ausgabe des Arraysfor

(i = 0; i < 6; i++) printf ( "%i " ,iAFeld[i]);  printf ( "\n" );    //2. Schritt piZeiger+2; ++(*piZeiger);   //Ausgabe des Arrays for

(i = 0; i < 6; i++)  printf ( "%i " ,iAFeld[i]);  printf ( "\n" );    //3. Schritt piZeiger += 2; *(piZeiger+1) = *piZeiger&12;   //Ausgabe des Arrays for

(i = 0; i < 6; i++)   printf ( "%i " ,iAFeld[i]);   printf ( "\n" );     printf ( "\nZeiger zeigt auf die Stelle, dessen Inhalt ist: %i\n" , *(piZeiger++));  printf ( "Zeiger zeigt auf die Stelle, dessen Inhalt ist: %i" , *piZeiger);

   return

0;

 } 

Meine erste Frage: was bedeutet piZeiger&12, meine zweite: warum ist der Befehl Zeiger +2 sinnlos? Es müsste wahrscheinlich heißen Zeiger = Zeiger +2 oder?

Und meine dritte Frage: was hat es mit dem Abstand der Adressen auf sich?

die eine Adresse endet mit d8 die andere mit d0 ansonsten sind sie identisch. ist also der Abstand immer ein Byte?


...zum Beitrag

#include <stdio.h>

int main()

{

//Variablendeklaration

int iAFeld[6] = {3, 7, 7, 9, 6, 9};

int* piZeiger = NULL;

int i = 0;

piZeiger = iAFeld;

piZeiger++;

.

printf("Adresse des ersten Arrayelements: %p\n", (void*)iAFeld);

printf("Adresse des dritten Arrayelements: %p\n", (void*)&iAFeld[2]);

printf("Wert des Zeigers: %p\n\n", (void*)piZeiger);

.

//Ausgabe des Ausgangsarrays

for (i = 0; i < 6; i++)

printf("%i ",iAFeld[i]);

printf("\n");

.

//1. Schritt

*(++piZeiger) = iAFeld[4];

.

//Ausgabe des Arrays

for (i = 0; i < 6; i++)

printf("%i ",iAFeld[i]);

  printf("\n");

  //2. Schritt

  piZeiger+2;

  ++(*piZeiger);

  //Ausgabe des Arrays

  for (i = 0; i < 6; i++)

  printf("%i ",iAFeld[i]);

  printf("\n");

  //3. Schritt

  piZeiger += 2;

  *(piZeiger+1) = *piZeiger&12;

  //Ausgabe des Arrays

  for (i = 0; i < 6; i++)

    printf("%i ",iAFeld[i]);

  printf("\n");

  printf("\nZeiger zeigt auf die Stelle, dessen Inhalt ist: %i\n", *(piZeiger++));

  printf("Zeiger zeigt auf die Stelle, dessen Inhalt ist: %i", *piZeiger);

  return 0;

 }

...zur Antwort
Kann mir jemand bei der Fehlersuche helfen?

Ich soll einen Code zur folgenden Aufgabe schreiben:

Schreiben Sie ein vollständiges C-Programm, welches eine komplette Additionsgleichung (a + b; a, b < 10) einliest, diese dann anschließend in ihre Einzelteile zerlegt und sie löst. Bei Eingaben, die nicht der gezeigten Additionsgleichung folgen, soll eine Fehlermeldung "falsche Eingabe" ausgegeben werden.

Hinweise:

  • Verwenden Sie geeignete Funktion aus der <string.h> um die Position des '+' im String zu ermitteln.
  • Zahlen sind in der ASCII-Tabelle um den Wert 48 nach rechts verschoben. Beachten Sie dies bei der Auswertung der Gleichung.
  • Arbeiten Sie nur mit Integern.

Mein Code enthält noch sehr viele Fehler ... ich weiß aber nicht genau, was ich falsch gemacht habe. Kann mir jemand weiterhelfen?

// Includes
#include <stdio.h>
#include <string.h>
 
  // Variablendeklaration
  int Gleichung[10];
  int* p = NULL;
  int* p2 = NULL;
  int* p3 = NULL;
  char Plus = '+';
  int iZahl1[5];
  int iZahl2[5];
  int iErg = 0;
   
  // Einlesen der Gleichung
  printf("Bitte geben Sie eine Additionsgleichung ein:");
  
  if ((fgets(Gleichung, sizeof(Gleichung), stdin)) == 0) {
    printf("Falsche Eingabe!");
    return 1;
  }
  
  // Zerlegen der Gleichung und Berechnung des Ergebnisses
  p = strstr(Gleichung, Plus);
  p2 = p++;
  p3 = p--;
  
  for (i = 0; i < 10, i++) {
    p2 = iZahl2[i];
    p2++;
  }
             
  for (i = 0; i < 10; i++) {
    p3 = iZahl1[i]
    p3--;
  }
  
  iErg = iZahl1 + iZahl2;
  
  // Ausgabe des Ergebnisses
  printf("\nErgebnis: %i + %i = %i", iZahl1, iZahl2, iErg);
  return 0;
}
...zum Beitrag

Okay also ich habe int main() vergessen... aber trd noch einige fehler hm

...zur Antwort