C 将无符号字符*强制转换为长字符
下面的表达是什么意思C 将无符号字符*强制转换为长字符,c,casting,long-integer,C,Casting,Long Integer,下面的表达是什么意思 unsigned char *res = malloc(5); 现在我播放res: (long)res 此强制转换意味着什么?使用该值将res指向的地址(无论如何,这只是一个数字)解释为长地址 它大部分时间都能工作,但并不完全正常(这在很大程度上取决于你如何使用它)。例如,如果您只是想打印它,您可以通过 printf("%p", res); 根据经验:用怀疑的态度对待任何类型转换使用该值会将res指向的地址(反正只是一个数字)解释为长地址 它大部分时间都能工作,但
unsigned char *res = malloc(5);
现在我播放res
:
(long)res
此强制转换意味着什么?使用该值将
res
指向的地址(无论如何,这只是一个数字)解释为长地址
它大部分时间都能工作,但并不完全正常(这在很大程度上取决于你如何使用它)。例如,如果您只是想打印它,您可以通过
printf("%p", res);
根据经验:用怀疑的态度对待任何类型转换使用该值会将
res
指向的地址(反正只是一个数字)解释为长地址
它大部分时间都能工作,但并不完全正常(这在很大程度上取决于你如何使用它)。例如,如果您只是想打印它,您可以通过
printf("%p", res);
根据经验法则:对任何强制转换都要持怀疑态度分配的内存未被读取,您只是将指向内存的指针投射到一个较长的位置。分配的内存未被读取,您只是将指向内存的指针投射到一个长的位置。这并不能直接回答您的问题,而是一个有用的信息,或多或少与您的选择相关 从指针类型转换为整数类型是由实现定义的(这意味着实现决定将指针转换为整数时发生的情况)。确实支持某种类型可逆转换的C99实现还应该提供两种类型,它们位于
中,专门用于将指针转换为整数,即uintptr\u t
和intptr\u t
。如果您的实现提供了这两种类型,那么您可以安全地将指针转换为这些类型并返回到原始指针类型
由于这些类型是实现定义的,因此您需要查看实现文档,了解底层类型是什么。这并不能直接回答您的问题,而是一个有用的信息,或多或少与您的假设相关 从指针类型转换为整数类型是由实现定义的(这意味着实现决定将指针转换为整数时发生的情况)。确实支持某种类型可逆转换的C99实现还应该提供两种类型,它们位于
中,专门用于将指针转换为整数,即uintptr\u t
和intptr\u t
。如果您的实现提供了这两种类型,那么您可以安全地将指针转换为这些类型并返回到原始指针类型
因为这些类型是实现定义的,所以您需要检查实现文档,了解底层类型是什么。假设
long
是2个单词,而unsigned char*
是1个单词。剩下的部分将放在哪里?调用堆栈?如果源类型为有符号和负数,则其余位将为1,否则为0。这意味着什么?你能给我举个例子吗?为什么我要把res指向的地址解释为long?假设long
是2个字,unsigned char*
是1个字。剩下的部分将放在哪里?调用堆栈?如果源类型为有符号和负数,则其余位将为1,否则为0。这意味着什么?你能给我举个例子吗?为什么我要把res指向的地址解释为long?