我已经阅读了一些问题但没找到我要找的东西。 这是一个类型转换的例子(我在一些视频中看到了它)
int s = 45;
double d = (double) &s;
(此示例用于演示如果执行此类类型转换,数据可能会丢失。) 但我无法理解上面的例子与此之间有什么区别。
int s = 45;
double d = (double) s;
或者
function sol=newton(fn,dfn,x0,tol)
old=x0+1;
while abs(x0-old)>tol
old=x0;
x0=old-feval(fn,old)/feval(dfn,old)
end
sol=x0;
答案 0 :(得分:0)
(double *) &s
意味着我们将s
的内存地址转换为指向一个double的指针(因为s
实际上是一个双倍)。
(double) &s
意味着我们将s
的内存地址转换为 double ,这是不正确的(变量的内存地址应该作为指针转换为类型)。
例如:
char s = 'c';
char *s_pointer = (char *)&s;
int t = 1;
int *t_pointer = (int *)&t;
等,等
答案 1 :(得分:0)
在这个例子中:
int s = 45;
double d = (double) &s;
您使用s
获取& operator
的地址, 将地址自身投放到double
在第一种情况下:
int s = 45;
double d = *(double *) &s;
您使用s
获取& operator
的地址,而不是您引用此地址,就好像它指向了双(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;