c中的**(&d)是什么意思?

时间:2019-01-13 15:50:44

标签: c pointers

我们的老师给了我们以下代码:

x = **(&d);

他的问题是:“您必须在该行上方添加哪些代码行,以便代码正确?”

有人可以帮助我吗?这条线是什么意思?

2 个答案:

答案 0 :(得分:3)

DeiDei的话是可能的,我在这里再解释

我们在C语言中,为了简化起见,考虑 x d 不是宏。

x = **(&d);等同于x = *d;,因为获取地址然后取消引用什么都没有

现在的问题是要找到一个x = *d;合法的上下文,因为该 d 必须是一个指针。假设int * d;

可能的目标也是没有分段错误,因此 d 需要记住一个有效地址。假设int a; int * d = &a;

现在我们为{em> x 分配*d,所以 x 的类型必须与 int 兼容。假设{{1} }

为了简洁起见,我们不想访问未初始化的值,因为 x 最终会收到必须初始化的 a 值。

DeiDei的

int a; int * d = &a; x = **(&d);与要求兼容,但是当然,它们还有许多其他解决方案

答案 1 :(得分:0)

x = **(&d); 

等效于

x = **&d; 

等效于

x = *(*&d); 

也适用于任何变量v

v == *&v 

成立。

从上面得出结论

*&d == d

如此

x = *(*&d); 

等于

x = *d;

由于取消引用运算符*仅可应用于指针,因此d必须是指针类型

T * d; /* Let be T any type. This defined d to be pointer to that type T. */

将运算符T*应用于类型*的变量,其结果将得出类型T本身。

按给出的方式

x = *d

由此得出结论,x的类型必须为T

因此该行必须是

T x, *d;

或更易读的形式

T x;
T * d;

:-)