简单C双指针

简单C双指针,c,pointers,C,Pointers,我正在学习C指针,非常困惑。我试图在网上搜索,但找不到任何明确的解释。这就是我想要理解的: int x = 8; int *ptr = &x; int **dptr = ptr; **dptr指向什么,x或*ptr?当我试图打印dptr的内容时,我发现它包含x的地址,而不是*ptr,但我不确定为什么 已编辑 int x = 8; int *p = &x; int **ptr = &p; int **dptr = ptr; 首先,我想你的意思是:int**dptr=&p

我正在学习C指针,非常困惑。我试图在网上搜索,但找不到任何明确的解释。这就是我想要理解的:

int x = 8;
int *ptr = &x;
int **dptr = ptr;
**dptr
指向什么,
x
*ptr
?当我试图打印
dptr
的内容时,我发现它包含
x
的地址,而不是
*ptr
,但我不确定为什么

已编辑

int x = 8;
int *p = &x;
int **ptr = &p;
int **dptr = ptr;

首先,我想你的意思是:
int**dptr=&ptras
int**dptr=ptr无效

int x = 8;
int *ptr = &x;
int **dptr = &ptr;
dptr
指向
ptr
对象

*dptr
指向
x
对象

**dptr
不是指针,而是
int
对象
x

编辑:问题经过编辑,
ptr
是一个
int*
,但现在似乎是一个
int**

int x = 8;
int *p = &x;
int **ptr = &p;
int **dptr = ptr;
首先,值8存储在
x

下一步,用声明

int *p = &x;
p
将指向
x
(也就是说,
p
现在存储
x
的地址)

下一个

现在
ptr
将存储
p
的地址,p
反过来存储
x

int **dptr = ptr;
dptr
存储
ptr
的地址,后者依次存储指向
x
p
的地址

因此,现在,
**dptr
将具有给定声明的整数
x

的值

int x = 8;
int *p = &x;
int **ptr = &p;
int **dptr = ptr;
那么以下是正确的:

**dptr == **ptr == *p ==  x == 8  (int)
 *dptr ==  *ptr ==  p == &x       (int *)
  dptr ==   ptr == &p             (int **)

这不应该编译。无法将ptr分配给dptr。一个是int*一个是int**。你是对的,我的意思是**ptr。对不起,我的意思是int**ptr=&x和int**dptr=ptr。@在这种情况下,它是无效的C。你的意思是
int**dptr=(int**)ptr
?那么这个呢?int x=8,int*p=&x,int**ptr=&p,int**dptr=ptr@然后,程序列表中的dptr
与ptr的值相同,因此
**dptr
**ptr
的值相同。
**dptr == **ptr == *p ==  x == 8  (int)
 *dptr ==  *ptr ==  p == &x       (int *)
  dptr ==   ptr == &p             (int **)