私は今日C言語を学んでいます。私は管理された言語(Java、C#、Pythonなど)でしばらく前からコーディングしてきました。私はポインタの詳細を理解していると思っていましたが、次に期待どおりに動作する次のコードを書きましたが、互換性のないポインタ型の警告が生成されました。このCコードがなぜ機能するのかについての説明
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;
}
だから私はGoogleで検索し、警告を処分した
setText(output);
にライン
setText(&output);
を変えてしまいました。しかし、今私はなぜ最初のものが全く働いているのか分かりません。私は(char * xはchar x [];と本質的に同じなので)私が知る限りではアドレスのアドレスを送っていました。私は何を誤解していますか、なぜこれらの両方が機能しますか?
なぜ 'setText'がその実装を見ずに動作していたのか、あなたのことを言うのは難しいです。すべての 'setText'が変数を設定しても、その後にプログラムが終了しても、プログラムがあなたが望むことをしているかどうかは本当に分かりますか? – jwodder
'T *'は 'T [K]'と同じではありません。例えば、 http://c-faq.com/~scs/cgi-bin/faqcat.cgi?sec=aryptr – delnan
@delnan:リンクが壊れているようです – Cameron