

先程「[何をする関数かわからない](https://ja.stackoverflow.com/q/62345/19110)」で質問した 関数pal
についての続きですが、先程の関数はポインタを用いていましたが、もしもポインタを用いずに記すとしたら以下のようになると思い、コンパイルしてみたのですが、エラーになってしまいました。どのようなところがおかしいですか。

[code]

    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;
    }
    
[/code]


CC BY-SA 4.0
2020-01-18T11:58:17.140
62349
2020-01-19T09:32:22.773
2020-01-19T09:32:22.773
3068
36412
question
c
ポインタを使用したコードを配列に書き換えるとコンパイルエラーになる


いろいろ間違っています。  
１ iの値が初期化も、インクリメントもされていない。  
２ 配列と言っているのに配列のインデックスではなく、ポインターをインクリメントしている。  
３ 最初のtの設定が間違っている。  
４ ポインターの示す値（配列のi番目の値）とポインターを比較している。（tをポインターと仮定)  
などなど。  
答えを書くと意味が無いと思いますので、間違っていると思われるところを指摘しました。


CC BY-SA 4.0
2020-01-19T02:57:13.393
62356
2020-01-19T03:02:18.220
2020-01-19T03:02:18.220
24490
24490
62349
answer


「ポインタ変数と配列の同じところは何か、異なるところは何か」に重点をおいて勉強することをお勧めします。  
以下はヒントです。

  * ポインタ変数は文字通り変数なのでポインタ変数の内容を変えることができます。
  * 配列名はアドレスを表しています、そのアドレスを別のアドレスに書き換えることはできません。

推測ですが、質問された方は実行文における配列を`配列[添え字]`の形式で覚えている気がします。  
実行文における`配列名[添え字]`は配列ではなく、添え字で示される位置の、「配列の要素」を示します。  
「配列」と「配列の要素」の違いもしっかり理解した方がよいと思います。  
「配列の要素」はどちらかといえば変数と同じで内容を変更できます。配列名が示すアドレスは変更できません。


CC BY-SA 4.0
2020-01-19T05:05:23.650
62358
2020-01-19T05:05:23.650
35558
62349
answer