C言語のポインタのことを誤解していた

これは個人的なメモです。
0
tt4cs @tt4cs

うーむ、やっぱりCのポインタが全然わかっていない。 int main(void) { int *p, *q; *p = 0; *q = 0; } これがなぜダメなのか、わからない。

2011-11-06 00:02:38
🥔えび🦐➕️🍞➕️🔥➡️🍤 @ebc_2in2crc

@tt4cs (ポインタがどこをポイントしているか、ですね)

2011-11-06 00:06:05
tt4cs @tt4cs

@ebc_2in2crc あー、ポインタは宣言しただけで、まだポインタの指し示す場所が正式に確保されているわけじゃないから、勝手に値を保存しちゃダメなんだ。。って理解で合ってます?

2011-11-06 00:13:32
🥔えび🦐➕️🍞➕️🔥➡️🍤 @ebc_2in2crc

@tt4cs はい。確保というかポインタがどこを指してるか?が定まっていないのに参照(代入操作ですが)しようとしているからだと思います。

2011-11-06 00:16:17
tt4cs @tt4cs

@ebc_2in2crc たとえば、int a; p = &a; なら、ポインタpは変数aを指し示す。もしくは、p = (int *)malloc(sizeof(int)); とすれば、int 型の値1個分の場所がポインタpの指し示す場所として確保される。こんな感じでしょうか?

2011-11-06 00:25:54
tt4cs @tt4cs

@ebc_2in2crc ありがとうございます!

2011-11-06 01:05:05
sano66 @sano66

@tt4cs pが指す変数のポインタが未定義だからです。int *p;int x=1;p=&x;*p=0;printf("%d",x);

2011-11-06 04:19:29
tt4cs @tt4cs

@sano66 ありがとうございます!

2011-11-06 04:20:42