2
私はCの空白関数と文字列を試しています。私はこのプログラムを試しました:C同じ配列を印刷すると、2つの方法で異なる結果が得られます。
#include <stdio.h>
#include <string.h>
void print(char** test);
int main(){
char* test = "abcdef";
print(&test);
return 0;
}
void print(char** test){
for(int i=0;i<strlen(*test);i++)
printf("%c\n",*test[i]);
}
私は最初にa A �
セグメンテーションフォールトを表示します。しかし、*test[i]
を*(*test+i)
に変更した後は、ほぼ同じことですが、期待通りに動作します。
*test[i]
と*(*test+i)
がない場合、私のコードが2番目の例で動作するのはなぜですか?
これは[*演算子優先順位*](http://en.cppreference.com/w/c/language/operator_precedence)の問題です。配列インデックス演算子 '[]'は、逆参照演算子 '*'よりも高い優先順位を持ちます。何か[良い初心者の本](http://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list)はあなたに(IMO)告げていたはずです。 –
また、「ほぼ同じもの」は*「*正確には同じもの」ではありません。実際、あなたが「ほぼ同じもの」と考える2つの表現は*ではない*です。 (なぜ私の前のコメントを参照してください)。 –
これを修正するには '(* test)[i]'を実行できますか? –