- 締切済み
ポインタの基礎的なこと
#include <stdio.h> int main() { char *a; *a='X'; printf("%c\n", *a); return 0; } 実行すると、"X"がきちんと出力されるんですが、 この場合"X"という文字が格納されている場所(ポインタが指し示している場所)は、メモリが確保されていないので、もっと長いプログラムになった場合に、この"X"が格納されている場所は、ほかの変数の領域に割り当てられたりして使われてしまう可能性があるということなんでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
ポインタはC言語で一番難しい部分なんで、しっかり勉強しておいた方がいいですよ。 で、char *a; の部分ですが、ここでは a という名前のポインタを用意しているだけです。 ただポインタを用意しただけでは、C言語はその中身を用意してくれません。 要するに、*a というのは「 a という名前の表札を用意しろ」ということです。 ただ表札だけの存在ですから、中身はありません。 しかも、中身がないだけでなく、「どこの誰が使っていたか分からない、赤の他人の住所」が記載されているんです。 なので、そこに値を入れるということは、もうすでに他人が住んでいるかもしれない土地を勝手に使ってしまうということで、大変危険です。 もしかしたらシステム領域が住んでるかもしれません。 一介のアプリケーションがシステム領域を勝手に潰すと、最悪マシンがハングアップします。 なので、新しく自分で土地を作り、その新しい土地の住所を表札に記載しなおしてあげなければいけません。 *a という表札に新しい住所を記載する方法は色々ありますが、malloc() 関数を使うのが基本でしょう。(もっと簡単な方法ありますけどね)
- ranx
- ベストアンサー率24% (357/1463)
当然です。 こういうプログラムを書いてはいけません。
お礼
ありがとうございます。そんな危険なことだったんですね!大変勉強になりました。