Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ char*(*arr)[2]和char**array[2]有何不同?_C++_C_Arrays_String_Pointers - Fatal编程技术网

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
的值,每个值中的值都是指向其第一个元素的指针(其数组大小和边界已去除)但是,例如, SAREZOR ARR 不评估,因此给出数组大小。

C或C++中的一个数组,另一个是指向数组的指针。标题和问题不匹配。请纠正一个。@他刚刚忘记(或不知道)。把他的代码放在后面的记号里。这是一样的。@DmitriZaitsev:标签就是为了这个。Dang,是一个网站做的。知道计算规则的顺序我觉得很傻。@Hogan我在这里看不到计算顺序的问题。这是优先权的问题。什么都不计算。声明是语句,不是表达式。??H2CO2——我不是说有问题。我猜从技术上讲,我使用的是“评估顺序”,而不是“精确性”——但你为什么要嘲笑我在《趣味》中说的愚蠢评论?@Hogan抱歉,我没有意识到这很有趣。此外,一些人认为优先级==评估顺序是一个常见的混淆来源。不过,这不是——想想
&
|
运算符(关于这个问题有很多问题,如果你感兴趣,请阅读其中一个)。这太棒了!!请修复第一个错误的图表--首先指向指针,然后指向数组(在
()
中)像这样:@Hogan抱歉,你能修好它吗,我没有得到你想要的东西mean@Hogan啊,我想这是一样的,看,现在我用了开始标记
^
@POW-我明白你的意思了..我做了一个小小的改变,所以它击中的第一个东西是
*
--你觉得怎么样?@POW-好的,我把它改回去了,我明白你的意思,而不是我怎么想的。