'struct(*)[]'和'struct*[]'有什么区别?

Bre*_*ard 3 c++ arrays struct pointers

我正在玩指针,指针数组和数组.

我创建了一个struct调用Fraction并尝试将一个数组传递Fraction给一个带有Fraction指针数组的函数.我收到错误:

Error   1   error C2664: 'void display(Fraction *[],int)' : cannot convert 
                             argument 1 from 'Fraction (*)[10]' to 'Fraction *[]'
Run Code Online (Sandbox Code Playgroud)

我知道这不起作用,但你对这些中的每一个都称之为什么?Fraction(*)[]Fraction*[].例如:int []是一个整数数组,int*是一个整数指针.除了围绕*的括号外,上面的代码看起来与我相同.

我不需要修复这个错误我只是想了解这两个看似相似的结构之间的差异.

Chr*_*phe 5

错误原因

该参数Fraction *fracArr[]需要一个指向分数的指针数组.

您已经定义Fraction farry[max_size];farry一个分数数组的含义.

当您将函数&farry作为第一个参数调用时,您试图获取指向数组(Fraction (*)[10])而不是指针数组()的指针Fraction *[].因此不匹配错误.

如果您的目标是使用一系列分数,只需更改您的函数,如下所示:

void display(Fraction fracArr[], int fracCounter){
    for (int i = 0; i < fracCounter; i++){
        cout << fracArr[i].num << "/" << fracArr[i].den << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

并称之为display(farry, fracCounter);.

补充说明:

更一般地,类型为未知大小的数组的参数T arg[]作为T *arg指向第一个元素的指针传递.

定义您的参数Fraction *arg[]Fraction **arg将导致相同的代码.该[]只是隐藏这个技术细节,使意图更加清晰(即指针数组与工作的指针,以指针工作)

  • @BrettReinhard [回答类似问题的优秀网站](http://cdecl.org/). (2认同)