繁体   English   中英

不了解 C 中的类型转换

[英]don't understand typecasting in C

我已经阅读了一些问题,但没有找到我想要的。 这是一个类型转换的例子(我在一些视频中看到过)

    int s = 45;
    double d = *(double *) &s;

(显示此示例是为了演示如果您执行此类类型转换,数据将如何丢失。)但我无法理解上面的示例与此示例之间的区别是什么。

    int s = 45;
    double d = (double) &s;

或这个

    int s = 45;
    double d = (double) s;

(double *) &s意味着我们铸造的内存地址s作为一个指向双(因为s实际上是一个双)。

(double) &s意味着我们铸造的存储器地址s作为这是不正确的(一个变量的存储器地址应被铸造为一个指针,它指向类型)。

例如:

char s = 'c';
char *s_pointer = (char *)&s;

int t = 1;
int *t_pointer = (int *)&t;

等等等等

在这个例子中:

int s = 45;
double d = (double) &s;

您使用& operator s的地址,并将地址本身转换为double

在第一种情况下:

int s = 45;
double d = *(double *) &s;

您使用& operator s的地址,而不是引用此地址,就好像它指向 double (double *) &s

现在您有一个指向 double 的指针,它位于您的int所在的同一地址中。

使用*运算符,您可以获取此双指针中的值。

请注意,强制转换发生在取消引用之前! 好像是:

int s = 45;
double d = *((double *) &s);

为了更容易理解,我们可以分成几行:

int s = 45;
unsigned int addressOfS = &s;
double* pointerToTheSameNumAsPointerToDouble = (double*)addressOfS;
double theValueInThatPointer = *pointerToTheSameNumAsPointerToDouble;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM