C 指针和确定数据类型

C 指针和确定数据类型,c,pointers,C,Pointers,我对如何阅读通用指针语法感到困惑,尤其是当它开始涉及数组、双星号、三星号等时 例如: char** a = ...; *ptr = &a[1]; 你怎么看这个?在逻辑中,ptr的最终数据类型是什么? 编辑:这不是功能代码,它更多的是一个展示对指针理解的练习。首先,a类型为char**,或“指向字符指针的指针”。根据您的上下文,这在概念上也可以被视为指向c字符串或c字符串数组的指针 a[1]将a视为一个数组,并获取索引1中的项(第二项,因为0是第一项)。此值的类型为char*(指向字符或

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

例如:

char** a = ...;
*ptr = &a[1];
你怎么看这个?在逻辑中,ptr的最终数据类型是什么?
编辑:这不是功能代码,它更多的是一个展示对指针理解的练习。

首先,
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
列表的“子视图”。

必须有
ptr
的早期声明,它告诉您它的类型。在这段代码中,您使用的是现有变量
ptr
(正如没有提到类型名称这一事实所表明的那样),好的,但这不会改变答案(即
ptr
的类型是由其声明决定的,您没有显示)。谢谢您,这正是我所寻找的。