2017-01-14 4 views
0

Так что, если у меня есть код:символов и адрес массива символов

void main (void) 
{ 
    char s[] = "Programming is hard"; 

    printf("%s", &s); 
    printf("%s", s); 
    return 0; 

} 

Они оба дают одинаковый результат. Но & s должен быть адресом массива символов справа? поэтому shouldnt 'printf распечатывает адрес вместо того, что хранится в адресе?

Спасибо.

+2

По определению (значение a) адрес массива является одним и тем же (значением as) адресом первого элемента массива. – alk

+0

Чтобы распечатать addres, prinft ("% p", &s); –

+2

... 'printf ("% p ", (void *) &s);' @GabrielPellegrino – alk

ответ

2

Поведение первого printf не определено из-за несоответствующего форматирования.

Во многом ваш компилятор добр к вам.

Не делайте этого!

-1

Если вы хотите распечатать адрес переменной, используйте% x или% p в качестве форматирования.

+0

'x' неверно, если значение указателя не выбрано для наилучшего' uintptr_t'. – alk

+0

Также при использовании 'p' значение указателя должно быть выбрано в' void * '. – alk