gpt4 book ai didi

C 双重类型转换

转载 作者:太空宇宙 更新时间:2023-11-04 06:23:47 26 4
gpt4 key购买 nike

这是来自乔恩·埃里克森 (Jon Erikson) 的《剥削艺术》一书中的这段代码。我知道第二行的类型转换让编译器让你独自处理数据类型。我不确定的是为什么在底线上需​​要双重类型转换。

int *int_pointer;  
int_pointer = (int *) char_array;

for(i=0; i < 5; i++)
printf("[integer pointer] points to %p, which contains the char '%c'\n", int_pointer, *int_pointer);
int_pointer = (int *) ((char *) int_pointer + 1);

我假设这是因为如果没有 (int *) 就这样让它增加正确的数据类型字符,但这不是您想要的吗?为什么要类型转换回 int?

括号内的*是怎么回事?这是取消引用变量中的数据吗?一些解释将不胜感激。

最佳答案

它不是将类型转换为 intchar,而是将 pointer 类型转换为 char 指针或 int 指针。

当您向指针添加一个时,它会根据项目的类型缩放增量,前进到指向的下一个项目

如果项目是int,它前进一个int的大小。在当前环境中这可能是 4 或 8,但希望将来会更大,这样我们就可以停止使用 bignum 库:-)

如果项目是 char 类型,它会增加一个(sizeof(char)always 一个,因为 ISO C 定义了一个byte 作为 char 的大小而不是八位)。

因此,如果您有四字节的 int 类型,那么推进 int 指针和 char 指针之间会有很大的区别。例如,考虑以下代码:

int *p = 0;                 // bad idea but shows the concept.
p = p + 1; // p is now 4.
p = (int*)(((char*)p) + 1) // p is now 5.

最后的陈述分解为:

(char*)p - get a char pointer version of p (a)
a + 1 - add one to it (b)
(int*)b - cast it back to an int pointer (c)
p = c - replace p with that value

关于C 双重类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29738231/

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