括号内的 C++ 指针

Giu*_*Pes 5 c++ pointers

我对这种语法有点困惑。

void function ( float (*points)[2]); 
Run Code Online (Sandbox Code Playgroud)

这是声明了一个浮点指针数组吗?如果是这样,为什么以下代码返回错误:

void foo( float (*points)[2]) {}

float *p[2];
foo(p); // error

float (*p)[2];
foo(p); // okay
Run Code Online (Sandbox Code Playgroud)

为什么需要括号?

Adi*_*vin 6

float *p[2]定义一个float*大小为 2的 数组。

float (*p)[2]定义一个指向 的数组的指针float,大小为 2:

int main(int argc, char* argv[])
{

    float* p[2];
    p[0] = new float(0.0);
    p[1] = new float(1.0);
    std::cout << *(p[0]) << " , " << *(p[1]) << "\n";

    float Q[2] = { 0.0, 1.0 };
    float(*q)[2] = &Q;
    std::cout << (*q)[0] << " , " << (*q)[1] << "\n";

    delete p[0];
    delete p[1];
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果的大小Qq不匹配,你会得到一个错误:

float Q[3] = { 0.0, 1.0, 2.0 };
float(*q)[2] = &Q; //error C2440: 'initializing' : cannot convert from 'float (*)[3]' to 'float (*)[2]'
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,您会收到 `error C2440: 'initializing' : cannot convert from 'float (*)[3]' to 'float (*)[2]'` 在赋值 `float(*q)[2] = &amp;Q` (2认同)