※ ChatGPTを利用し、要約された質問です(原文:ポインタについて)
C言語ポインタについての質問
このQ&Aのポイント
C言語を勉強している中でポインタについて分からない箇所があります。
プログラムの中で&iとpiの違いによってセグメンテーションエラーが発生する原因を知りたいです。
質問内容を具体的に述べ、アドレスを渡す際の違いについて詳しく教えていただけると幸いです。
C言語を勉強しております。
ポインタについてどうしても分からない箇所があり、
質問させて頂きます。
例えば、以下の様なプログラムがあったとします。
#include <stdio.h>
int hoge(int *);
int main(){
int i;
hoge(&i);
printf("%d\n",i);
exit(0);
}
int hoge(int *p_pi){
*p_pi = 10;
}
上記のプログラムは標準出力に"10"と表示するだけのプログラムですが、
これを
#include <stdio.h>
int hoge(int *);
int main(){
int *pi;
hoge(pi);
printf("%d\n",*pi);
exit(0);
}
int hoge(int *p_pi){
*p_pi = 10;
}
と書くとhogeの「*p_pi = 10;」の箇所でセグメンテーションエラーが発生します。
&iで渡した時とpiで渡した時ではどの様な違いがあり、エラーが発生するのでしょうか。
私の認識では、
&iで渡す時はアドレスを渡し、
piで渡す時もアドレスを渡すため、同じ動作になると考えています。
どうかご教示ください。
情報に不足があれば、仰ってください。
よろしくお願いします。
お礼
ご回答ありがとうございます。 なるほど。考え付きませんでした。 初期化(?)をしっかりやらないとダメってことですね。 int *piを宣言しただけでは、 piとしてのメモリだけ確保されて、 piの参照先のメモリは確保されてない(事が多い)んですね。 偶然どこか正当なメモリを参照してたら怖いですね・・・。 勉強になりました。 ありがとうございます。