Q
混淆引用操作
1
A
回答
2
int i = 1;
int *p = &i;
的*
是聲明的語法的一部分。 int *p
表示p
的類型爲int*
。
i = *p;
這*
是一個引用操作。
但是,兩者使用相同的語法並不是巧合。 C的(看似怪異的)聲明語法主要基於「聲明遵循使用」的原則。閱讀聲明
int *p;
的方法之一是,它宣稱*p
是int
類型。由此可見,p
的類型爲int*
。同理:
int *a, b, c[20];
說*a
,b
和c[blah]
都是int類型,所以a
是int*
類型,b
是int
類型,c
是int[20]
型。 (請注意,聲明和使用之間的對應關係是不完美的; c[20]
是剛剛過去的數組的末尾,而實際上並不存在。)
這就是爲什麼(思想至少在一所學校)的*
在指針聲明旁邊是標識符,而不是類型。
4
6
這是一個指向聲明的例子:
int *p = &i;
這是一個引用操作的例子:
i = *p;
運算符只適用於變量,不適用於類型,它們不是一回事。
+1
這不僅是*指針聲明*;它更多。它是*指針定義和初始化*。 – Nawaz
1
這是一個指針聲明,而不是解除引用操作符。
我想強調的是,星號(*),我們當 聲明指針只使用意味着它是一個指針(這是它的 型複合符的一部分),並且不應該與我們之前看到的 解引用運算符相混淆,但它也是用星號(*)編寫的 。他們只是兩個不同的東西用相同的符號表示。
0
要以這種方式
int *p = &i;
是有點難以理解定義指針。我建議你使用這個(注意空格)
int* p = &i;
但會有這樣的方式確定一個以上的指針時的一個問題:
int* p = &i, * q = NULL;
所以比較清楚,先定義指針類型,並使用該類型來定義變量:
typedef int* int_ptr;
int_ptr p = &i, q = NULL;
相關問題
- 1. 引用混淆
- 2. 引用混淆DLL
- 3. JavaScript`var`關鍵字的混淆操作
- 4. C++ - 操作員刪除混淆
- 5. 混淆$操作符和括號
- 6. F#操作符/函數混淆
- 7. 混淆引用和指針
- 8. C#類作用域混淆
- 9. 混淆索引視圖
- 10. numpy布爾索引混淆
- 11. 再次引發混淆
- 12. LIBGDX earclippingtriangulator混淆了索引
- 13. 索引混淆堆棧LIFO
- 14. SQLServer2008:混淆或混淆
- 15. fileno和引用弱化混淆
- 16. 自動引用計數混淆
- 17. 混淆PHP 7引用次數
- 18. 混淆使用
- 19. .htaccess不工作和混淆
- 20. 麻煩製作混淆
- 21. onCreate()工作流混淆
- 22. 混淆:製作file-min.js?
- 23. 混淆的`===`和`工作===`
- 24. 混淆
- 25. 使用proguard混淆
- 26. Substring()使用混淆
- 27. dealloc調用混淆
- 28. CUDA OpenGL互操作,資源映射混淆緩衝區
- 29. Sqlite數據庫多線程SELECT和UPDATE操作混淆
- 30. 混淆爲什麼CSS不起作用
這是我更喜歡「int * p」語法而不是「int * p」的原因之一。 –