我们的老师给了我们以下代码:
x = **(&d);
他的问题是:“您必须在该行上方添加哪些代码行,以便代码正确?”
有人可以帮助我吗?这条线是什么意思?
答案 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;
:-)