我正在嘗試使用雙指針(指向指針的指針)並想正確理解它。我在上面的代碼嘗試以下代碼指針與指針的指針
#include<stdio.h>
int main()
{
int y = 5;
int *p = &y;
int *q = &p;
printf("\n\n %p %p %p %p %d\n\n",q,&p,p,*q,*p);
return 0;
}
現在,p是一個指針指向y和q是一個指針指向第我有意不使用雙指針(** q),只是爲了檢查會發生什麼。編譯器給了我一個警告,指示不兼容的指針類型。當我執行代碼時,我明白q是一個指向p的指針,所以它包含了p的地址,但是* q沒有給出p中包含的值,也就是y的地址,而是我得到了一些垃圾值。是否因爲我沒有將q聲明爲雙指針?任何人都可以解釋爲什麼我得到一些奇怪的* q值?
q是**不是**指向p的指針 –
您打破了q的規則,因此發出了警告,但我承認我不確定此示例中應該打印什麼。可能是違反標準問題或導致未定義行爲的事情?我會讓其他人對這個進行破解。 –
@EugenRieck然後'q'指向哪裏? – cdhowie