簡體   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