绑定数组的double to double *&

时间:2013-08-02 13:28:22

标签: c++ reference

我试图通过使用指针

来引用数组
double a[5];
double*& b = a; //doesn't compile
double*& b = &a[0]; //doesn't compile either
double*& b = &static_cast<double*>(a); //nope

有没有办法让b绑定到数组第一个元素的地址?

谢谢!

4 个答案:

答案 0 :(得分:2)

要使用指针引用数组,您不需要任何内容 特殊:

double* b = a;

如果你想要一个指向整个数组的指针,而不是只是 第一个元素是:

double (*b)[5] = &a;

,但这非常不寻常,并且会让任何读者感到非常困惑。

如果你想要引用整个数组(没有指针):

double (&b)[5] = a;

这通常用作函数参数,但我从未见过 它用在其他地方。

如果要引用指定第一个指针的指针 元素,它必须是const,因为转换的结果 (包括数组到指针的转换)是一个右值,和 不能绑定到非const引用:

double *const (&b) = a;

如果你真的需要一个指针的非const引用, 你必须引入一个指针变量:

double* pa = a;
double* (&b) = pa;

答案 1 :(得分:0)

在这个程序中,使用了一个指针数组:

//#include <conio.h>
#include <iostream>
using namespace std;
int main()
{
    int a[5] = {1,2,3,4,5};
    int b[5] = {6,7,8,9,10};
    int (*pa[4])[5] = {&a,&b,&a,&b};
    for(int i = 0; i < 4; i++)
    {
        for(int j = 0; j < 5; j++)
            cout<< (*pa[i])[j] << "
        cout<< "\n";
    }
    //_getch();
    cin.get();

}

在某些编译器中,允许&aa进行比较。例如,此代码可以在(旧的)Borland编译器中编译:

//#include <conio.h>
#include <iostream>
using namespace std;
int main()
{
    int a[20];
    cout<< (a == &a);
    //_getch();
    cin.get();
}

并且输出为1.但是在之前的程序中而不是

int (*pa[4])[5] = {&a,&b,&a,&b};

一个人不能写

int (*pa[4])[5] = {a,b,a,b};

答案 2 :(得分:0)

正如其他人所说,你不需要引用指针,只需使用指针加倍。

 double *b = a;

您无法将a分配给引用指针的原因是因为从double-array到double-double的静默转换会产生rvalue。

如果使用对指针的引用,你应该使它成为对const指针的引用,const引用可以绑定到rvalues:

double a[5];
double *  const &b = a;

答案 3 :(得分:0)

您可以获得指向第一个元素的指针:

double * b = a;

const对未命名指针的引用:

double * const & b = a;

或对数组的引用:

double (&b)[5] = a;

但是没有办法在没有引用指针变量的情况下对指针进行非const引用。