指针和确定数据类型

时间:2019-03-05 02:14:25

标签: c pointers

我对如何阅读通用指针语法感到困惑,尤其是当它开始涉及数组,双星号,三星号等时。

例如:

char** a = ...;
*ptr = &a[1];

您将如何阅读?遍历逻辑,ptr的最终数据类型将是什么? 编辑:这不是功能代码,它更多是为了展示对指针的理解。

1 个答案:

答案 0 :(得分:0)

首先,a的类型为char**,或“指向字符的指针的指针”。根据您的上下文,在概念上也可以将其视为指向c字符串或c字符串数组的指针。

a[1]a视为一个数组,并获取索引1中的项目(第二个项目,因为第一个为0)。此值的类型为char*(指向字符或数组的指针),位于a指向的值之后。

&a[1]为您提供了对a[1]的引用。这意味着它将为您提供一个指向包含char**的内存的指针值(在这种情况下为a[1])。

*ptr =取消引用ptr位置,并将其设置为表达式右侧的值。由于&a[1]的类型为char**,因此*ptr的类型可能也是 的类型char**,尽管可能不是(这可能是不希望的)

如果*ptr的类型为char**,则ptr的类型为char***。根据上下文和您要完成的工作,此代码的语义可能会有所不同,但是我最好的猜测是a是一个字符串数组,并且ptr设置为指向数组的第二个元素。请记住,数组的第二个元素是一个指针,ptr并不指向该指针指向的对象,而是指针本身的实际位置。

下面是带有字符串列表的伪编码说明:

a = ["apple", "pear", "banana"]

运行代码后...

ptr = ["pear", "banana"]

ptr所指向的对象与a相同,而它们只是a列表的“子视图”