ダブルポインター(ポインターへのポインター)を試していて、それを正しく理解したいと思っていました。私は次のコードを試していました
#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 は p を指すポインターです。何が起こるかを確認するためだけに、意図的にダブルポインター (**q) を使用していません。コンパイラは、互換性のないポインター型を示す警告を出しました。コードを実行したとき、q は p へのポインターであることを理解したので、p のアドレスが含まれていますが、*q は p に含まれる値、つまり y のアドレスを提供していません。むしろ、ジャンク値を取得しました。 . q を double ポインターとして宣言していないためですか?*q に対して奇妙な値が得られる理由を正確に説明できる人はいますか?