Die Schleife durch array mit Zeigern

Das folgende Programm in C++ druckt mehr Leistung als ich erwartet habe. Kann mir jemand erklären, warum das passiert ist? Das Programm versucht, Zeiger verwenden, um eine Schleife durch das integer-array, drucken jeden Wert mit auf den Weg.

#include <cstdio>
using namespace std;

int main(int argc, char **argv) {
    puts("hi");
    int ia[5] = {1,2,3,4,5};
    for (int *p = ia; *p; ++p) {
        printf("Char is: %d\n", *p);
    }
    return 0;
}

/*
 hi
 Char is: 1
 Char is: 2
 Char is: 3
 Char is: 4
 Char is: 5
 Char is: 32767
 Char is: -811990796
 Char is: -133728064
 Char is: 1606416320
 Char is: 32767
 Char is: -1052593579
 Char is: 32767
 Program ended with exit code: 0
*/
  • Ihre Schleife geschrieben um zu stoppen, wenn es auf ein null-element in das array (worauf *p ausgewertet, um zu false). Aber das array nicht in der Tat enthalten eine null-element. Also die Schleife geht Weg am Ende des Arrays, also ausstellen zu undefiniertem Verhalten.
  • FWIW, das ist nicht c++ - Ausnahme: völlig irrelevant using namespace std, und einen alias für stdio.h. ideone.com/saAZKk
  • Es ist ganz in gültigen C++ - code.
  • Jeder C-code ist absolut gültigen C++ - code. Heißt das, wir könnten die drop-c-tag? Lassen Sie mich Fragen, eine andere Art und Weise, was in dieses problem ist c++ - spezifisch ist? EDIT: Sorry, gehen wir nicht in eine Debatte bitte. Ich wollte nur darauf hinweisen, das ist nicht wirklich c++ - spezifisch und machen den Menschen neu zu bewerten, ob dies in C oder C++. Zu viele Menschen verwechseln diese.
  • C-code ist absolut gültigen C++ - code" - Nein, ist es nicht. Der OP-code ist.
  • Ich zurücknehmen, es gibt in der Tat nur wenige Fälle, in denen die gültigen c-code wird die Reise c++ - compiler. Das hat auch nicht wirklich den Punkt ändern.
  • Nicht nur die Reise der compiler. Manchmal sind die Unterschiede kompilieren und stattdessen etwas unerwartetes tun, wenn Sie erwarten, dass die C Verhalten.

InformationsquelleAutor none | 2017-01-17
Schreibe einen Kommentar