私は現在、Cでプログラミングする方法を学んでいます。今日はポインタで始めました。次のような状況に遭遇しました。私はプログラム参照される変数と異なるタイプのポインタ
#include<stdio.h>
int main() {
int a;
double * p;
p = &a;
*p = 12.34;
printf("%d\n",a);
* (int *) p = 12.34;
printf("%d\n",a);
return 0;
}
をコンパイルするとき、それは
$ gcc zeigertypen.c
zeigertypen.c: In function ‘main’:
zeigertypen.c:7:7: warning: assignment from incompatible pointer type [-Wincompatible-pointer-types]
と実行時に言って、私は出力
2061584302
Speicherzugriffsfehler (Speicherabzug geschrieben)
を取得し、エラーメッセージが
memory access error (core dumped)
のようなもののためにドイツ語であります
ただし、if私は、コードの目的は、彼らが参照している変数とは異なるタイプのポインタに問題があることを実証することであるエラーが消え、出力が
0
12
ある*p = 12.34;
行をコメントアウトします。私はC++を学ぶために使用している教科書によると、出力は
2061584302
12
私は新しい教科書を手に入れました。それは、cヘッダをインクルードし、未定義の動作の出力を指示するように思われます。 – George
これは実際にはCではなく、C++で、私は@Georgeでプログラミングしています。間違って申し訳ありません。 –
まあ、私は本の年齢と妥当性を見て、それはあなたに嘘をついていて、[UB](https://en.wikipedia.org/wiki/Undefined_behavior)に関するセクションに移りますが、そうではありません。/ – George