括号内的C ++指针

时间:2016-02-22 11:57:01

标签: c++ pointers

我对这种语法有点困惑。

void function ( float (*points)[2]); 

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

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

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

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

为什么需要括号?

2 个答案:

答案 0 :(得分:4)

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];
}

请注意,如果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]'

答案 1 :(得分:1)

这是一个指向两个浮点值数组的指针。它的实际用途是能够传递二维数组,其中一维固定为2:

float data[][2] = {{1.2, 3.4}, {5.6, 7.8}, {9.1, 10.2}};
foo(data);

通常,像这样的函数也会占用数组的整体大小。

或者,像这样的函数可用于分配两个浮点数的数组,并将指针设置为分配结果。