[英]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.