私はちょうどCを学び始めました。そして、私はポインタの働きを理解するためにMinGW for Windowsを使っていくつかの簡単なプログラムを実行してきました。私は、次のことを試してみました:Cのポインタに直接値を代入する
私はそれが動作しない実行可能ファイルを実行すると、正しくコンパイルされますが#include <stdio.h>
int main(){
int *ptr;
*ptr = 20;
printf("%d", *ptr);
return 0;
}
- 値は、コマンドラインに印刷されません、代わりに私は.exeファイルをというエラーメッセージが表示されます動作を停止しました。
私はint型の変数に値を格納し、以下に示すように、その変数のメモリアドレスに*のPTRを割り当てるしようとしたときしかし:
#include <stdio.h>
int main(){
int *ptr;
int q = 50;
ptr = &q;
printf("%d", *ptr);
return 0;
}
それが正常に動作します。
私の質問は、なぜ私は直接ポインタにリテラル値を設定できないのですか?私はポインタのチュートリアルを見てきましたが、そのほとんどは2番目の例と同じようにしています。
何か助けていただければ幸いです。
ポインタが初期化されていないため、どこにでもポインタがあり、プログラムがクラッシュする可能性があります。 – Till
あなたは幸運にも、エラーで終了しました。 – JonnyRo
@JonnyRoが正しいです。実際のコードでは、この種のバグは、1週間に1回のデバッグセッションを引き起こし、何らかの他の変数が何度もランダムに変更される理由を理解しようとします(実際にテストしているとき、パブリックデモンストレーション)やセキュリティ違反があり、別の値を操作して誰かが "is_admin"フラグをtrueに設定すると、 – abarnert