私はcポインターに手を出していて、次のコードを説明できませんでした。
int main()
{
int i = -3;
int *ptr;
int **ptr2;
int ***ptr3;
ptr = &i;
ptr2 = &ptr;
ptr3 = &ptr2;
printf("ptr = %p\n",(void *)ptr);
printf("&ptr = %p\n",(void *)&ptr);
printAddr(&ptr);
printAddr2(&ptr2);
printAddr3(&ptr3);
return 0;
}
void printAddr(int **num)
{
printf("address of int ** = %p\n", (void *)&num);
}
void printAddr2(int ***num)
{
printf("address of int *** = %p\n", (void *)&num);
}
void printAddr3(int ****num)
{
printf("address of int **** = %p\n", (void *)&num);
}
出力は次のとおりです。
ptr = 0xbf9d64a0
&ptr = 0xbf9d64a4
address of int ** = 0xbf9d6490
address of int *** = 0xbf9d6490
address of int **** = 0xbf9d6490
私の疑問は、なぜ対処する必要があるのかということ(address(int)) == address(address(address(int)))
です。
説明してくれてありがとう。
私はこの質問が関連していることを発見しました:
しかし、作者はそれらを等しくなるように明示的に割り当てています。