差异在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最变量名 - 而高于后 - 型) –