我目前在學習如何用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)
但是,如果我註釋掉線*p = 12.34;
錯誤消失,輸出是
0
12
代碼的目的是用不同類型的比它們所引用的變量的指針來演示該問題。根據我使用的學習C++的教科書,輸出應該是
2061584302
12
我會得到一個新的教科書,看起來它告訴你包括c頭並指定未定義行爲的輸出。 – George
它實際上是C,而不是C++,我在@George中編程。對不起,這個錯誤。 –
好吧,無論哪種方式,我會看這本書的年齡和有效性,也許這是對你說謊,並會轉向關於[UB](https://en.wikipedia.org/wiki/Undefined_behavior)的部分,但如果不,很好......:/ – George