Почему такой вывод - PullRequest
       2

Почему такой вывод

2 голосов
/ 19 января 2012

Я выполнил этот код после компиляции в кодовых блоках: -

#include <stdio.h>
int main()
{
    char arr[]="HELLO";   
    int a=arr;    
    return printf("...%s ,%s\n",arr,&a+1);
}

Я получил такой вывод: - ... ПРИВЕТ, ПРИВЕТ

когда я изменил &a на a, printf вернул -1.Я не могу разобраться в этой адресной логике, помогите пожалуйста.(Друг дал мне этот код и спросил его объяснение, а я не могу его найти).Так что я хотел бы знать, почему .. Спасибо

1 Ответ

10 голосов
/ 19 января 2012

Вы указываете printf ожидать строку, но вы даете ей адрес int (&a).Это вызывает неопределенное поведение , поэтому может произойти все что угодно.

[ На практике, вероятно, происходит то, что компилятор помещает a непосредственно под arr в стек.Таким образом, значение &a+1 оказывается равным &arr.printf затем повторно интерпретирует этот адрес как указатель на char, и в результате получается HELLO.Если бы компилятор расположил стек по-другому, вы бы наблюдали другое поведение. ]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...