gpt4 book ai didi

将一些变量的总和转换为指针,然后再次转换为整数

转载 作者:太空宇宙 更新时间:2023-11-04 08:01:01 25 4
gpt4 key购买 nike

所以,我在阅读的代码中遇到了一行奇怪的代码,我不确定为什么会这样转换。

代码(为了清晰起见,我已经将声明等放在其中,而且,正如您可能猜到的那样,UINT1 是一个 1 字节无符号整数,INT2 是一个 2 字节有符号整数):

#define Z 2
INT2 t;
UINT1 *x; //sent into the function as a pointer as in f( UINT1 *x )
INT2 y = 20; //declared as 0 first then some number is assigned (let's say 20)
t = (INT2) *(INT2 *) (x + y + Z);

我不明白的是,为什么要使用这种过于复杂的方式来转换它,而其中一种方式应该同样有效:

t = (INT2) (x + y + Z);
t = (INT2) *(x + y + Z);

这样做的原因是什么?我是 C 的新手,可能遗漏了一些东西。

最佳答案

在没有上下文的情况下,不清楚这段代码到底做了什么,但是这一行:

t = (INT2) *(INT2 *) (x + y + Z);

x 进行一些指针运算,然后将结果转换为 指向 INT2 的指针(顺便说一句,可能违反了严格的别名。)并取消引用

解引用的结果然后再次转换为 INT2——这部分是多余的,解引用一个 INT2 * 已经给出了一个 INT2 , 所以它可以读作:

t = *(INT2 *)(x + y + Z);

另一方面,您的“简化”版本:

t = (INT2) (x + y + Z);

做一些完全不同且完全没有意义的事情:x 上的指针算法的结果地址在这一行中被转换为 INT2

关于将一些变量的总和转换为指针,然后再次转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46850523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com