C++ C++;括号内的指针

C++ C++;括号内的指针,c++,pointers,C++,Pointers,我对这个语法有点困惑 void function ( float (*points)[2]); 这是在声明浮点指针数组吗?如果是,为什么以下代码返回错误: void foo( float (*points)[2]) {} float *p[2]; foo(p); // error float (*p)[2]; foo(p); // okay float Q[3] = { 0.0, 1.0, 2.0 }; float(*q)[2] = &Q; //error C2440: 'in

我对这个语法有点困惑

void function ( float (*points)[2]); 
这是在声明浮点指针数组吗?如果是,为什么以下代码返回错误:

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

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

float (*p)[2];
foo(p); // okay
float Q[3] = { 0.0, 1.0, 2.0 };
float(*q)[2] = &Q; //error C2440: 'initializing' : cannot convert from 'float (*)[3]' to 'float (*)[2]'

你为什么需要括号

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

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

这是指向两个浮点值数组的指针。其实际用途是能够通过一维固定为2的二维阵列:

float data[][2] = {{1.2, 3.4}, {5.6, 7.8}, {9.1, 10.2}};
foo(data);
通常,类似这样的函数也会采用数组的总体大小


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

float(*点)[2]
是一个两个浮点数组上的指针。这是什么?数组和指向数组的指针?当然不是。@Jarod42为什么需要括号?@Giuseppes否则它将是一个指针数组,就像第一个指针一样。如果您对此感到困惑,那么这是一个很棒的c类型->英语转换器。如果
Q
大小为3,会发生什么情况?在这种情况下,您会得到
错误C2440:“初始化”:无法从“float(*)转换[3] “到”浮动(*)[2]”
分配
float(*q)[2]=&q