关于指针使用的说明

标签 c pointers

我对指针短语的确切含义有疑问。

我有以下方法:

myFunc(const void * p)
{
  ...
}

它正在被调用:

myStruct *st;
...
myFunc((char **)&st->arr);

我有使用指针的经验,但在这种情况下,我仍然迷失在所有这些指针和转换中。 我可以得到有关此案例如何运作的准确解释吗?

谢谢

最佳答案

这似乎是质量很差的代码!也许并不危险,因为 const 出现在原型(prototype)中。

myFunc(const void * p) 接受指向任何内容的指针,而 const 应该意味着它不会触及它。

现在,st是指向myStruct的指针,因此st->arrarr的值member 和 &st->arrarr 成员的内存地址。假设arr是一个数组,st->arr值已经是一个指针。

所以,(char**)可能是&st->arr的正确类型,它是一个指向字符数组的指针。如果类型正确,则无需强制转换!

当您需要告诉编译器将您的数据作为另一个数据处理时,您可以进行强制转换。在这种情况下,这是有道理的 myFunc((const void *)&st->arr);

无论如何,在没有有关 myFunc 的更多信息的情况下,我相信程序员的真正意图是 myFunc((const void *) st->arr);

关于关于指针使用的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17649600/

相关文章:

c - C中指针丢失值

c - 写入该文件时来自单个文件的多个缓冲输入流?

c - 在 C 中生成 [-1, 1] 之间的随机数?

c - 取消引用指针错误

c++ - 通过指针合并 2 个数组

c++ - 通过c中的指针传递二维数组时出错

c - 纯 C 多态性、类型双关和严格的别名。这有多合法?

c - 内核空间和用户空间之间的大共享内存

c - c程序中的总线错误10

C++ : The second time calling a function, 但仍然影响我以前的指针