printf() druckt den ganzen array

Nehmen wir an ich habe folgenden code in meinem C-Programm:

#include <stdio.h>

void PrintSomeMessage( char *p );

int main(int argc, char *argv[]) {
    char arr[10] = "hello";
    PrintSomeMessage(&arr[0]);
    return 0;   
}

void PrintSomeMessage(char *p)
{
    printf("p: %s",p);
}

Warum der Ausgang von diesem sein würde, das ganze Wort "Hallo" statt des Zeichens "h"?

Ich verstehe aber, dass, wenn ich eine "%c" im formatter, es wird gedruckt, nur einen einzigen Brief. Aber trotzdem ist die Speicher-Adresse für jeden Buchstaben in dieser Adresse ist anders. Bitte, jemand es mir erklären?

  • Warum kann ich nicht brauchen, um dereferenzieren ein-Zeichen-Zeiger in C, bevor Sie ihn drucken?
  • Hinweis: %c nicht braucht-Adresse zu drucken, wo, wie %s Reisen müssen, bis \0 wie @Rohan erklärte in der Antwort.
  • printf() mit %c müssen Wert die variable, die ganz offensichtlich/logisch, dass Sie nicht benötigen, sollten Adresse für den Zugriff auf den Wert für single - element werden können(pass-by-value). Wo sind die print-string-es müssen die Adresse zu Reisen, bis \0 Begegnung gleichen Rohan erklärte in seiner Antwort. Zusätzlich im Speicher speichern scanf braucht-Adresse, auch mit %c
  • Zu printf() eine %c müssen Sie mindestens eine char variable, nicht seine Adresse.
  • Beachten Sie, &arr[0]&*(arr+0)&*arrarr, so PrintSomeMessage(&arr[0])PrintSomeMessage(arr)
  • Im Grunde die gleiche Frage wie stackoverflow.com/questions/16909490/...

Schreibe einen Kommentar