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