在本例中,主要是理解指针如何与数组一起工作的一个简短问题:
char *lineptr[MAXLENGTH]
现在我知道这和
char **lineptr
是一样的,因为数组本身就是一个指针。我的问题是,它是如何以不同的形式/非引用状态工作的,例如:
lineptr
*lineptr
**lineptr
*lineptr[]
在这些状态中,发生了什么,每个状态在代码中做什么/工作?
非常感谢您的帮助!
最佳答案
现在我知道这和char **lineptr
是一样的,因为数组本身就是一个指针。
不,数组和指针不一样。请参阅C常见问题解答:http://c-faq.com/aryptr/index.html。
lineptr
这是数组本身。在大多数情况下,它会衰减为指向其第一个元素的指针(即
&lineptr[0]
)。所以它的类型不是int *[MAXLENGTH]
就是int **
。*lineptr
这将取消引用指向第一个元素的指针,因此它是第一个元素的值(即,它与
lineptr[0]
相同)。它的类型是int *
。**lineptr
这将取消对第一个元素的引用(即,它与
*lineptr[0]
相同)。它的类型是int
。*lineptr[]
我认为这不是有效的语法(在这个上下文中)。