関数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
は であり、thing
で&t
なければなりませんthing*
。
その奇妙な行で何が起こったのですか?