Załóżmy Mam następujący kod w moim programie C:printf() drukuje cały szereg
#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);
}
Dlaczego wyjście byłoby to całe słowo „hello” zamiast pojedynczego znaku „H "?
Rozumiem jednak, że jeśli wstawię "%c"
do formatyzatora, wydrukuje on tylko jedną literę. Ale wciąż adres pamięci dla każdej litery w tym adresie jest inny. Proszę, wytłumacz mi to?
[Dlaczego nie muszę wyłuskać wskaźnika znaku w C przed wydrukowaniem?] (Http://stackoverflow.com/questions/15841696/why-dont-i-need-to-dereference-a-character-pointer-in-c-before-printing-it/15841740#15841740) –
uwaga: '% c' doesn ' t potrzebujesz adresu do wydrukowania, gdzie jako '% s' trzeba podróżować aż do' \ 0' jak @Rohan wyjaśnił w odpowiedzi. –
@SuvP 'printf()' z '% c' need ** wartość ** zmienna, jest dość oczywiste/logiczne, że nie powinno wymagać adresu do wartości dostępowej dla ** pojedynczego ** elementu (można przekazywać według wartości) . Gdzie mam wydrukować ciąg, potrzebuję adresu, aby podróżować, dopóki '\ 0' nie spotka się z tym samym Rohan wyjaśnionym w jego odpowiedzi. Dodatkowo do przechowywania w pamięci scanf potrzebuje adresu nawet z '% c' –