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