看看函数f中奇怪的一行:
typedef char thing[1];
void f(thing t){
thing *p;
/* Strange line. Changing t to &t is wrong.
C++ require a (thing *) cast.
*/
p = t;
*(*p) = 'C';
}
int main(int argc, char* argv[])
{
thing g;
thing *h;
/* Works as expected. */
h = &g;
g[0] = 'A';
*(*h) = 'B';
f(g);
/* g[0] is now 'C' */
return 0;
}
将f更改为
void f(thing t){
char **p;
p = &t; /* note the & */
*(*p) = 'C';
}
也有效。
我期待p=&t
的是正确的指示,而不是p=t
。毕竟t
是 athing
并且&t
必须是 a thing*
。
那条奇怪的线发生了什么?