将unsigned char *转换为long

时间:2012-01-08 08:43:49

标签: c casting long-integer

以下表达是什么意思?

unsigned char *res = malloc(5);

现在我施展res

(long)res  

这个演员是什么意思?

3 个答案:

答案 0 :(得分:4)

使用该值会将res点(无论如何只是一个数字)的地址解释为long。

它大部分时间都可以使用,但它并不完全正常(很大程度上取决于你如何使用它)。例如,如果您只是想打印它,那么就可以使用

printf("%p", res);

根据经验法则:对任何人士进行怀疑

答案 1 :(得分:2)

未读取已分配的内存,您只是将指向内存的指针转换为long。

答案 2 :(得分:0)

这并不直接回答您的问题,但是与您的信息或多或少有关的信息是有用的。

从指针类型到整数类型的强制类型是实现定义的(这意味着实现决定了将指针强制转换为整数时会发生什么)。支持某种类型的可逆转换的C99实现还应该提供<stdint.h>中专门用于将指针转换为整数的两种类型,即uintptr_tintptr_t。如果您的实现提供了这两种类型,那么您可以安全地将指针转换为这些类型并返回到原始指针类型。

由于这些类型是实现定义的,因此您需要检查实现文档中的基础类型。