Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将无符号字符*强制转换为长字符_C_Casting_Long Integer - Fatal编程技术网

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?