質問: X[i++]; ^ ``` まず、アドレスの表示について、手元の参考書ではこのプログラムと同じく『%p』を用いているのですが、なぜうまくいかないのでしょうか。 『printf("%p ", X + i);』を『printf("%p ", (void *)(X + i));』とキャストするとエラーメッセージは消えましたが、前者ではダメな理由がわかりません。 二つ目に、関数msort内の作業用配列についてエラーメッセージが出ていますが、ここでの宣言は可変長配列なのでしょうか。 n1、n2は定数だと思います。(これらをNにするとエラーメッセージは消えました) 最後に『‘i’ に関する演算は定義されていません』というエラーメッセージがありますが、これについては全くわかりません。 iを宣言し忘れではありませんし、どう変更すればよいのでしょうか。 これらを部分的に修正していきたいと思っておりますので、プログラム全体の方針等は目を瞑っていただければと思います。 ご回答よろしくお願いします。
回答: > > mergesort.c:9:5: 警告: 書式 ‘%p’ は引数の型が ‘void *’ であると予期されますが、第 2 引数の型は ‘int *’ です [-Wformat=] > > > よーく読め。それはエラー(error)じゃない。警告(warning)だ。 ダメなんじゃない、「ひょっとしたらあなたの意図とは異なる挙動を示すかもよ」と**警告**している。