Разъяснение, почему работает этот код C

Я изучаю C сегодня. Я уже некоторое время кодирую на управляемых языках (Java, C #, Python и т. Д.). Я думал, что разбираюсь в деталях указателей, но затем я написал следующий код, который работал, как ожидалось, но сгенерировал предупреждение «несовместимый тип указателя».

void setText(char* output) {
    //code to set output to whatever, no problems here.
}

int main(int argc, const char* argv[]) {
    char output[10];

    setText(&output);

    //[EDITED] ...other test code which printf's and further manipulates output.

    return 0;
}

Итак, я погуглил и в итоге изменил строку

setText(&output);

на

setText(output);

, который избавился от предупреждения. Но теперь я не знаю, почему первый вообще работал. Я отправлял адрес адреса, насколько я могу судить (потому что char * x; по сути то же самое, что и char x [];). Что я неправильно понимаю и почему оба этих принципа работают?

7
задан Peter Mortensen 4 July 2011 в 01:27
поделиться