2011-06-20 3 views
0

C:次のコードでは文字&segmantation障害のポインタ

char i,*p; 
i = 65; 
p = &i; 
p = (char *) 66; 
(*p)++; 
printf("%d",p); 

私は、セグメンテーションフォールトを得ました。なぜか分からなかった。私はchar(この場合はchar 66 = C)へのポインタを持っていますし、66から67までの値を変更します。charの値はこの変更から保護されていますか?チャーを除いて他の人と一緒にも起こっていますか?

私は、この事の背後に立つ(それを修正するだけではない)という考えを理解しようとしました。ありがとう。ここで

答えて

7

が問題である:

p = (char *) 66; 

それは次のようになります。

*p = 66; 

pcharへのポインタであるので、あなたはそれに66のような値を割り当てることはできません。ポインターがどこに「見える」ところに値を割り当てるために、deferfernce pを行うことができます。

あなたはpポイントは、あなたが再びこのような間接参照演算子(*)を使用する必要がありますする価値印刷する場合:あなたはこれを行うことができ、ポインタのアドレスを印刷したい場合は

printf("%d", *p); // prints the value where p points to 

を:

printf("%p", p); // prints the address where p points 
+0

'(Char)66'なぜ、「Char」は大文字になりますか?なぜ、* p = 66でなく、キャストを使うのですか? – AnT

+0

Charは私の間違いで大文字にされました。とにかくそれを取り除いた。 – insumity

+0

OPはおそらく 'printf()'コールで '* p'を使いたいと思っています。 –

1

文字ポインタには文字は格納されず、文字が見つかる場所のアドレスが格納されます。したがって、

p = (char *)66; 

は、pは、文字を見つけることができるアドレス番号66を指していると言います。あなたのプログラムではアドレスにアクセスすることさえできず、文字を格納することはそれほど難しくありません。

関連する問題