我对指针短语的确切含义有疑问。
我有以下方法:
myFunc(const void * p)
{
...
}
它正在被调用:
myStruct *st;
...
myFunc((char **)&st->arr);
我有使用指针的经验,但在这种情况下,我仍然迷失在所有这些指针和转换中。 我可以得到有关此案例如何运作的准确解释吗?
谢谢
最佳答案
这似乎是质量很差的代码!也许并不危险,因为 const
出现在原型(prototype)中。
myFunc(const void * p)
接受指向任何内容的指针,而 const
应该意味着它不会触及它。
现在,st
是指向myStruct
的指针,因此st->arr
是arr
的值member 和 &st->arr
是 arr
成员的内存地址。假设arr
是一个数组,st->arr
值已经是一个指针。
所以,(char**)
可能是&st->arr
的正确类型,它是一个指向字符数组的指针。如果类型正确,则无需强制转换!
当您需要告诉编译器将您的数据作为另一个数据处理时,您可以进行强制转换。在这种情况下,这是有道理的 myFunc((const void *)&st->arr);
无论如何,在没有有关 myFunc 的更多信息的情况下,我相信程序员的真正意图是 myFunc((const void *) st->arr);
关于关于指针使用的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17649600/