C++ char*(*arr)[2]和char**array[2]有何不同?
C++ char*(*arr)[2]和char**array[2]有何不同?,c++,c,arrays,string,pointers,C++,C,Arrays,String,Pointers,char*(*arr)[2]和char**array[2]之间有什么不同??如果我使用函数传递char*strings[2],那么如何从问题第一部分提到的两种方式访问元素? 还请告诉其他访问指针数组元素的方法。 谢谢。报告: char *(*arr)[2] declare arr as pointer to array 2 of pointer to char 及 只是[]数组声明符的优先级高于*指针限定符,因此括号会改变其含义。char**array[2]是指向字符指针的两元素指针数组 c
char*(*arr)[2]
和char**array[2]
之间有什么不同??如果我使用函数传递char*strings[2]
,那么如何从问题第一部分提到的两种方式访问元素?
还请告诉其他访问指针数组元素的方法。
谢谢。报告:
char *(*arr)[2]
declare arr as pointer to array 2 of pointer to char
及
只是
[]
数组声明符的优先级高于*
指针限定符,因此括号会改变其含义。char**array[2]
是指向字符指针的两元素指针数组
char*(*arr)[2]
是指向字符指针的两元素数组的指针
注意。当以null结尾时,指向字符的指针可以用作C中的字符串。char*(*arr)[2]
是指向指针数组的指针
char**array[2]
是指向指针的指针数组
如果我使用函数传递char*strings[2]
,那么如何从问题第一部分提到的两种方式访问元素
字符串
是指针数组,因此字符串
给出了第一种类型。你不能从中得到第二种类型
<>在C++中,我建议您停止使用奇怪的复合类型,使用更高级的数组类,如<代码> STD::vector < /C> >和<>代码> STD::String < /C> > < P> >:--/P>
a]char*(*arr)[2]
+------+
| +--+ |
| | | |
| ^ | |
char * (*arr ) [2]
| | | |
| | | |
| +----+ |
+---------+
identifier arr is pointer
to array of 2
pointer to char
+----------+
| +----+ |
| ^ | |
char* *arr [2] |
| | | |
| +------+ |
+------------+
identifier arr is an array 2
of pointers
to pointer
to char
+-----+
| |
^ |
char *strings [2]
| |
+--------+
identifier string is an array of 2
pointers
to char
b]char**arr[2]
+------+
| +--+ |
| | | |
| ^ | |
char * (*arr ) [2]
| | | |
| | | |
| +----+ |
+---------+
identifier arr is pointer
to array of 2
pointer to char
+----------+
| +----+ |
| ^ | |
char* *arr [2] |
| | | |
| +------+ |
+------------+
identifier arr is an array 2
of pointers
to pointer
to char
+-----+
| |
^ |
char *strings [2]
| |
+--------+
identifier string is an array of 2
pointers
to char
同样地
c]char*字符串[2]
+------+
| +--+ |
| | | |
| ^ | |
char * (*arr ) [2]
| | | |
| | | |
| +----+ |
+---------+
identifier arr is pointer
to array of 2
pointer to char
+----------+
| +----+ |
| ^ | |
char* *arr [2] |
| | | |
| +------+ |
+------------+
identifier arr is an array 2
of pointers
to pointer
to char
+-----+
| |
^ |
char *strings [2]
| |
+--------+
identifier string is an array of 2
pointers
to char
所以,要知道找出不同点我一直认为有用的规则是“从内到外,从右到左”: 所以在第一个内部,paren组有“*arr”,从右到左是“arr是指针” parens中没有留下任何内容,因此“arr是一个指针”指向它的其余部分,从右到左:一个由两个指向char的指针组成的数组
我一直发现一条类似的简短规则很有用,那就是“C数组的值是指向其第一个元素的指针”——这也突出了对其值和其他属性使用名称的区别:
f(arr)
和arr+1
都使用arr
的值,每个值中的值都是指向其第一个元素的指针(其数组大小和边界已去除)但是,例如,&
和|
运算符(关于这个问题有很多问题,如果你感兴趣,请阅读其中一个)。这太棒了!!请修复第一个错误的图表--首先指向指针,然后指向数组(在()
中)像这样:@Hogan抱歉,你能修好它吗,我没有得到你想要的东西mean@Hogan啊,我想这是一样的,看,现在我用了开始标记^
@POW-我明白你的意思了..我做了一个小小的改变,所以它击中的第一个东西是*
--你觉得怎么样?@POW-好的,我把它改回去了,我明白你的意思,而不是我怎么想的。