这究竟是做什么的? [*(字符*)P1]

时间:2014-01-10 13:28:23

标签: c pointers char void

我不熟悉指针,因为我开始在高中学习Pascal,现在我正在升级到C.我的要求是解释我在看到类似[*(char*)p1]之类的内容时应该怎么想。不要羞于给我写几行:)

谢谢。

P.S。 p1是const void *。更准确。

4 个答案:

答案 0 :(得分:3)

假设[*(char*)p1]是数组指示符,(char*)用于转换p1以生成p1 char *类型。然后使用*取消引用它以使用地址(p1指向)的值作为某个数组的索引。

答案 1 :(得分:1)

[*(char*)p1]有点不完整,前面需要一个变量名,以使数组订阅有意义,例如foo[*(char*)p1]

在这种情况下,它意味着:

  • 将p1转换为指向char的指针
  • 取消引用此指针(提供char值)
  • 使用此值作为索引来查找数组

请注意,使用char作为索引会使大多数编译器不满意并导致它发出警告。这是因为大多数情况下,当char被用作索引时,它是由错误发生的,而不是由意图发生的,也是因为它是实现定义的char是有符号还是无符号(因此它本身就是非便携式,如果你认为是错误的,你最终可能会意外地将索引编入界外。

答案 2 :(得分:1)

void *p1; //指向void或泛型指针的指针;当您想要灵活处理数据类型时可能会使用

(char*)p1; //对char指针进行类型转换;你将P1指向的内存locatuion称为char

*(char*)p1; // p1指向的位置的值。

希望这有帮助。

答案 3 :(得分:0)

  1. (char*)p1是一个类型。这意味着,对于此语句,我们将p1视为指向字符的指针。
  2. *(char*)p1取消引用p1,由于类型转换char而将其解释为(char*)类型。指针指向一个内存位置,并且取消引用该指针返回内存p1中指向的位置的值。
  3. [*(char*)p1] ...阵列访问?这是一个更大的片段吗?
  4. void*someOtherType*转换在C代码中很常见,因为用于动态分配内存的malloc会返回void*