функции printf() выводит весь массив
предположим, у меня есть следующий код в моей программы C:
#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);
}
почему выход этого будет целым словом " привет "вместо одного символа"h"?
Я понимаю, что если я ставлю "%c"
в праматерии, он будет печатать только одну букву. Но все же, адрес памяти для каждой буквы в этом адресе отличается. Пожалуйста, кто-нибудь объяснит мне?
2 ответов
но все же, адрес памяти для каждой буквы в этом адресе отличается.
адрес памяти отличается, но как его массив символов они являются последовательными. Когда вы передаете адрес первого элемента, и использовать %s
, printf
будет печатать все символы, начиная с заданного адреса, пока не найдет ''
.
Incase массивы базовый адрес (т. е. адрес массив) адрес 1-й элемент в массиве. Также имя массива действует как указатель.
рассмотрим ряд домов (каждый из которых является элементом массива). Для идентификации строки, вам нужен только 1-й адрес.Вы знаете, что за каждым домом следует следующий (последовательный).Получив адрес 1-го дома, вы также получите адрес строки.
Incase строки литералы (массивы символов, определенные при объявлении), они автоматически
суффикс .
printf
печать с помощью спецификатора формата и адресу. Так как вы используете %s
он печатает с 1-го адреса (увеличивая указатель с помощью арифметики) до "\0"