Я изучаю 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 [];). Что я неправильно понимаю и почему оба этих принципа работают?