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
的类型是由其声明决定的,您没有显示)。谢谢您,这正是我所寻找的。