我知道char *x
是指向char的指針,但我對(char*) x
意味着什麼感到困惑。(char *)x或(void *)z是什麼意思?
回答
這意味着將x轉換爲指向char(或指向一般指針)的指針。
這是一個演員。您正在指示編譯器將x
視爲char *
,而不考慮其實際類型。只有在你確實知道自己在做什麼的情況下才能使用演員。
對於一些內置類型,編譯器可以執行有意義的轉換,例如,通過四捨五入將double
轉換爲int
,但對於其他類型,您可能得不到預期的結果。
()
是演員。
(char *) x
表示「將演員操作符應用於操作數x」。
轉換操作符將操作數的值轉換爲()
之間的類型。
類型轉換爲字符指針。
其實char *x
是一個聲明。 x
是指向char的指針。
如果您已經有一個變量,如x
,則可以將其轉換爲其他類型。在你的情況下,(char*) x
是多餘的,因爲x
已經是一個指向char的指針。但是你可以將它投射到int *
或其他東西。雖然,請注意,這是不安全的,因爲int大於char。
聲明的變量稱爲char類型的 「×」:
char x;
聲明一個稱爲 「X」 可變的,其是指向一個char:
char *x;
的東西鑄造那不是char類型的字符:
int x = 10;
char y = (char)x;
你提到了他沒有問的三個問題,但沒有提到他所做的一個問題。 – 2012-01-30 21:52:30
表達式(char *)x
是一種類型轉換爲wh ich返回x
的值,轉換爲char *
。
根據操作數和目標類型,轉換的結果可能會有很大的不同:例如,您可以使用轉換將浮點值四捨五入到整數精度,擺脫像const
這樣的限定符,將指針轉換爲整數用於高級地址計算,如對齊檢查和其他許多事情。
但是,並非所有可能的轉換都會導致合法值 - 例如,投射指針可能會違反別名和對齊規則。
在執行基於字節的指針算術時,將(有效的)非函數指針轉換爲char *
始終是合法且有用的。
- 1. 'char x []'是什麼意思?
- 2. 「isset($ x)?$ y:$ z」是什麼意思?
- 3. void(^)(NSData *)是什麼意思?
- 4. decltype(void())中的void()是什麼意思?
- 5. 「void *(*)(void *)」在C++中是什麼意思?
- 6. void 2中的void是什麼意思
- 7. 這是什麼意思std :: swap(*(void **)x,*(void **)y)?
- 8. 「char(&(...))[2]」是什麼意思?
- 9. char * argv []是什麼意思?
- 10. char&*是什麼意思?
- 11. 什麼(char *)0是什麼意思?
- 12. 在C中,「void(* parse_arg_function)(const char *)」函數參數是什麼意思?
- 13. 什麼意思是$ x(「// *」);
- 14. x [item]是什麼意思?
- 15. 「x == 01」是什麼意思?
- 16. JavaScript:「void 0」是什麼意思?
- 17. 這是什麼意思? void * free_me = 0;
- 18. 「void f(int(*)[7]){}」是什麼意思?
- 19. 什麼`circle:(null:?{setNativeProps(props:Object):void})`意思是
- 20. 'typename Enable = void'是什麼意思?
- 21. (void(^)(BOOL支持))是什麼意思?
- 22. (void)sizeof(0 [array])是什麼意思?
- 23. typedef int function(void *)是什麼意思?
- 24. 什麼!s || !*的意思? (S是char *)
- 25. my_string(char * s)是什麼意思?
- 26. 'char(* p)[5]'是什麼意思?'?
- 27. REGEX是什麼意思? [a-zA-Z] | \ d
- 28. 「declare + x」是什麼意思vs「declare -x」?
- 29. (x:_)和[x:_]是什麼意思?
- 30. (x << 13)^ x是什麼意思?
這不僅僅是治療。 (char *)x'的值可能與'x'的值不同(即使x是指針) – asaelr 2012-01-30 21:49:11
投射指針不會修改該值。所以它不會轉換任何東西。請驗證您的答案並相應地更改它,您在此提供錯誤信息。 – 2012-01-30 21:55:24
如果我沒有弄錯,標準中沒有任何內容承諾。 – asaelr 2012-01-30 22:02:53