gpt4 book ai didi

c++ - C/C++ 中奇怪的数组到指针的转换

转载 作者:搜寻专家 更新时间:2023-10-31 00:01:07 25 4
gpt4 key购买 nike

看看函数 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*

那条奇怪的线发生了什么?

最佳答案

当传递一个数组作为参数时,它会衰减为一个指针。所以f实际上得到了一个char *
然后您尝试取消引用它两次 - 您将它视为指向另一个指针的指针,该指针指向 char。这不管你怎么做都行不通。
如果你不转换它,C++(和 C,如果你启用警告)会告诉你有问题。如果进行强制转换,实际上是告诉编译器忽略该错误。但这仍然是错误的。

关于c++ - C/C++ 中奇怪的数组到指针的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11180487/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com