差異在C
回答
TYPE * variableName,TYPE * variableName和TYPE * variableName在語法上都是相同的。這是你如何使用它們的記號問題。
我個人更喜歡最後的形式。這僅僅是因爲星號運算符在右邊的令牌上工作。在像
TYPE* foo, bar;
只有foo是一個指針,但不是酒吧。因此,將星號放在變量名旁邊看起來更符合邏輯。
struct book
和char
都是這兩種類型。 因此,struct book* abook
是指向名爲abook的指針的類型簿結構的指針。
char* name
聲明是一樣的。它是一個指向char類型的指針。
這種定義指針的方式通常用於將文本字符串傳遞給函數,而不用填充本地堆棧堆。與複製整個字符數組相比,它的CPU佔用也更少。所以大多數這個字符指針將指向數組中的第一個字符(例如:char name[30];
)
如果要創建一個結構的多個實例,則需要標記該結構的聲明。如果聲明被標記,那麼稍後可以在結構實例的定義中使用該標記。例如:
struct book b;
定義一個變量PT其是類型結構點的結構。
struct book
是你的類型。現在你可以定義指向這種類型的指針。
如果仍是混淆了你,使用typedef
定義一個新的類型,這樣的結構:
typedef struct book Book;
typedef struct book* BookPtr;
請記住,BookPtr
只會影響第一個變量。
C編譯器將忽略符號之間的空格這樣:
char* name;
相同
char *name;
char * name;
char*name;
和
struct book *abook;
相同
struct book* abook;
struct book * abook;
struct book*abook;
星號可能位於變量名旁邊,因爲它只適用於它前面的變量,而不是類型。所以,如果你這樣做:
int* a1, b1;
你A1定義爲int指針和B1爲int,所以這是一個更清晰一點:
int *a1, b1;
至於到指針之間的內在差別char和指向結構體的指針,它們都是8個字節(在64位系統上 - 在32位系統上是4個字節)。即,
sizeof(char *)與sizeof(struct book *)相同。
但是,編譯器會保留有關每個指向的信息,以便知道如何處理諸如增加一個(a ++)或取消引用一個(* b)時的情況。也就是說,除了第一個地址被存儲在指針變量中之外,它需要知道涉及多少個字節。
如果a1指向一個int,則a1 ++現在應該進一步指向四個字節(a1中的地址整數值應該高4)。雖然如果a1指向一個char,那麼a1 ++現在應該只指向一個字節。
- 1. 差異在C++
- 2. 差異 - 在Objective-C
- 3. 差異在C#和VB.Net
- 4. 差異在Visual-C++和
- 5. 差異在VB.Net和C#
- 6. 差異在Java中對C#
- 7. 在C++中設置差異
- 8. 一般差異在C#4.0
- 9. C#篩選差異
- 10. C++構造差異
- 11. 結果差異C#
- 12. 的OpenCV houghcircles差異C C++
- 13. 差異,C++,C#和Java
- 14. 差異用C對C++
- 15. 差異 - C的Netbeans的
- 16. 差異SHA Ruby和C#
- 17. Pro * C性能差異
- 18. 差異的目標C
- 19. C#和XSLT舍入差異
- 20. Python/C++ - 精度差異
- 21. C#中的實現差異
- 22. C如果條件差異
- 23. '//'和'///'之間的C++差異
- 24. Objective-C字符串差異
- 25. C++ STL集合差異
- 26. C++ #include風格差異
- 27. C++堆狀態差異
- 28. 在C#中檢測此參數差異
- 29. 事件,在C#中的一些差異
- 30. 差異在C和Java之間鏈表
可能重複的[在C中,爲什麼星號在變量名之前,而不是類型之後?](http://stackoverflow.com/questions/398395/in-c-why-is-the-asterisk -before最變量名 - 而高於後 - 型) –