不理解C中的类型转换

时间:2015-10-04 18:38:54

标签: c type-conversion

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

    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;

2 个答案:

答案 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;
相关问题