我不熟悉指针,因为我开始在高中学习Pascal,现在我正在升级到C.我的要求是解释我在看到类似[*(char*)p1]
之类的内容时应该怎么想。不要羞于给我写几行:)
谢谢。
P.S。 p1是const void *
。更准确。
答案 0 :(得分:3)
假设[*(char*)p1]
是数组指示符,(char*)
用于转换p1
以生成p1
char *
类型。然后使用*
取消引用它以使用地址(p1
指向)的值作为某个数组的索引。
答案 1 :(得分:1)
[*(char*)p1]
有点不完整,前面需要一个变量名,以使数组订阅有意义,例如foo[*(char*)p1]
。
在这种情况下,它意味着:
char
值)请注意,使用char
作为索引会使大多数编译器不满意并导致它发出警告。这是因为大多数情况下,当char
被用作索引时,它是由错误发生的,而不是由意图发生的,也是因为它是实现定义的char
是有符号还是无符号(因此它本身就是非便携式,如果你认为是错误的,你最终可能会意外地将索引编入界外。
答案 2 :(得分:1)
void *p1;
//指向void或泛型指针的指针;当您想要灵活处理数据类型时可能会使用
(char*)p1;
//对char指针进行类型转换;你将P1指向的内存locatuion称为char
*(char*)p1;
// p1指向的位置的值。
希望这有帮助。
答案 3 :(得分:0)
(char*)p1
是一个类型。这意味着,对于此语句,我们将p1
视为指向字符的指针。*(char*)p1
取消引用p1
,由于类型转换char
而将其解释为(char*)
类型。指针指向一个内存位置,并且取消引用该指针返回内存p1
中指向的位置的值。[*(char*)p1]
...阵列访问?这是一个更大的片段吗?此void*
到someOtherType*
转换在C代码中很常见,因为用于动态分配内存的malloc
会返回void*
。