質問: 先程「何をする関数かわからない」で質問した 関数pal についての続きですが、先程の関数はポインタを用いていましたが、もしもポインタを用いずに記すとしたら以下のようになると思い、コンパイルしてみたのですが、エラーになってしまいました。どのようなところがおかしいですか。 ``` int pal(char s[]) { int i; char t[i]=s; while (t[i]!='\0'){ t++; } t--; while (s<=t){ if(s[i]!=t){ return 0; } s++; t--; } return 1; } ```
回答: 「ポインタ変数と配列の同じところは何か、異なるところは何か」に重点をおいて勉強することをお勧めします。 以下はヒントです。 * ポインタ変数は文字通り変数なのでポインタ変数の内容を変えることができます。 * 配列名はアドレスを表しています、そのアドレスを別のアドレスに書き換えることはできません。 推測ですが、質問された方は実行文における配列を`配列[添え字]`の形式で覚えている気がします。 実行文における`配列名[添え字]`は配列ではなく、添え字で示される位置の、「配列の要素」を示します。 「配列」と「配列の要素」の違いもしっかり理解した方がよいと思います。 「配列の要素」はどちらかといえば変数と同じで内容を変更できます。配列名が示すアドレスは変更できません。