C (Programmiersprache) – die besten Beiträge

C Programmierung: Zweidimensionale Arrays und Pointer?

Guten Tag,

ich hätte ein paar Fragen zu Pointern im Bezug auf zweidimensionale Arrays und Pointer. Zuerst wollte ich fragen, ob mir jemand die Syntax hinter Pointern für mehrdimensionale Arrays in C erklären kann?

Wenn ich einen Array habe, wie bspw.:

int ary[2][3] = { {1, 2, 3}, {4, 5, 6} };

Nun möchte ich einen Pointer auf diesen Array:

int (*p1)[3] = ary; // Pointer auf int Array der Länge 3
int (*p2)[2][3] = &ary; // Pointer auf 2 dim Array der aus 2 int Arrays der Länge 3 besteht.

Warum werden hier die Indizes hinter dem Pointer geschrieben und nicht etwas wie:

int[2][3] *p2

Wäre das nicht intuitiver? Gibt es hinter der Schreibweise einen logischen Sinn?

Eine weitere Frage zur Syntax wäre, wie man das korrekt aufschreibt, wenn man einen return Value oder einen Funktionsprototypen aus einem Pointer zu einem zweidimensionalen Arrays (mit klar definierter Größe) haben möchte?

Dazu wollte ich noch sichergehen, dass meine Vermutung, warum ich für die Zuweisung bei p2 noch ein & davor hängen muss, die Richtige ist. ary und &ary sind exakt die selben Pointer. Ist es so, weil ary als Pointer auf einen int Array der Länge 3 hinterlegt ist und &ary sozusagen ein Pointer auf einen zweielementigen Array ist, der aus int Arrays der Länge 3 besteht?

Über eine Antwort würde ich mich sehr freuen!

Computer, Technik, programmieren, Informatik, C (Programmiersprache)

Wahrheitstabelle ausgeben in C?

Hallo zusammen,

Das ist meine Aufgabe, die ich in der Uni lösen muss, allerdings habe ich ein Problem und es werden statt 16 Zeilen bei mir nur zwei Zeilen ausgegeben.

#include <stdio.h>


int main(void)
{
    int schritte = 0;
    int a, b, c, d, e, f, g, h, i;
    a = 0;
    b = 0;
    c = 0;
    d = 0;


    printf(" | A | B | C | D || E | G | H | I | F |\n");
    printf("-+---+---+---+---++---+---+---+---+---+-\n");


    while(schritte <= 16)
    {
        while(a <= 1)
        {
            while(b <= 1)
            {
                while(c <= 1)
                {
                    while(d <= 1)
                    {
                        e = a && -b;
                        g = c || -d;
                        h = -e || g;
                        i = a || b || d;
                        f = h==i;


                        printf(" |%d |%d | %d |%d ||%d |%d |%d |%d |\n", a, b, c, d, e, g, h, i, f);
                        
                        d++;
                    }


                    c++;
                }


                b++;    
            }
                  
            a++;
        }


        schritte++;
    }
}

als Ausgabe bekomme ich dann nur das:

| A | B | C | D || E | G | H | I | F |
-+---+---+---+---++---+---+---+---+---+-
 |0 |0 | 0 |0 ||0 |0 |0 |0 |
 |0 |0 | 0 |1 ||0 |1 |1 |1 |

muss da noch bisschen mit dem Abstand rumspielen aber vom Prinzip her passt es ja, nur leider nur mit den zwei Zeilen.

Danke im Vorraus!

Bild zum Beitrag
Computer, Studium, Schule, programmieren, Informatik, C (Programmiersprache)

Taschenrechner in C: Könnt ihr mir bei der Überprüfung des Operators helfen?

Hallo Community,

ich bräuchte Hilfe bei meinem C-Code. Ich komme nicht weiter bei der Überprüfung vom Taschenrechner. Ich möchte, dass der Operator überprüft werden soll. Sprich bei allen anderen Buchstaben außer A, S, M, D soll der Benutzer eine neue Angabe machen.

Hier mein Code:

int main()
{
  // Deklarierung der Variablen
  char auswahl;
  float zahl1, zahl2;
  float ergebnis;

  // Auswahl vom Rechenoperator
  printf("Wie moechtest du Rechnen?\n");
  printf("(a) Addieren\n");
  printf("(s) Subtrahieren\n");
  printf("(m) Multiplizieren\n");
  printf("(d) Dividieren\n");
  scanf("%c", &auswahl); // %c für char Variablen

  while () {
    if (auswahl != 'a' || 's' || 'm' ||'d') {
      printf("\nFalsche Eingabe. Waehle eine neue:");
    }
  }

  // Eingabe der Zahlen
  printf("Gib deine erste Zahle ein: ");
  scanf("%f", &zahl1);
  printf("Gib deine zweite Zahle ein: ");
  scanf("%f", &zahl2);

  // Auswahl-Auswertung vom Benutzer
  switch (auswahl) {
    case 'a':
      ergebnis = zahl1 + zahl2;
      break;
    case 's':
      ergebnis = zahl1 - zahl2;
      break;
    case 'm':
      ergebnis = zahl1 * zahl2;
      break;
    case 'd':
      ergebnis = zahl1 / zahl2;
      break;
    default:
      break;
  }

  // Ergebnisasugabe
  if (auswahl == 'a') {
    printf("\nErgebnis:\n%.1f + %.1f = %.1f", zahl1, zahl2, ergebnis);
  }

  if (auswahl == 's') {
    printf("Ergebnis:\n%.1f - %.1f = %.1f", zahl1, zahl2, ergebnis);
  }

  if (auswahl == 'm') {
    printf("Ergebnis:\n%.1f * %.1f = %.1f", zahl1, zahl2, ergebnis);
  }

  if (auswahl == 'd') {
    printf("Ergebnis:\n%.1f / %.1f = %.1f", zahl1, zahl2, ergebnis);
  }

  printf("\n\n");
  return 0;
}
Computer, programmieren, Informatik, Programmiersprache, C (Programmiersprache)

Meistgelesene Beiträge zum Thema C (Programmiersprache)