我正在尝试使用指针来引用数组
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 绑定到数组第一个元素的地址?
谢谢!
要使用指针引用数组,您不需要任何特殊的东西:
double* b = a;
如果你想要一个指向整个数组的指针,而不仅仅是第一个元素,它是:
double (*b)[5] = &a;
,但这非常不寻常,并且会极大地混淆任何读者。
如果要引用整个数组(无指针):
double (&b)[5] = a;
这通常用作函数参数,但我从未见过它在其他地方使用过。
如果你想要一个指向第一个元素的指针的引用,它必须是 const,因为转换的结果(包括数组到指针的转换)是一个右值,并且不能绑定到非 const 引用:
double *const (&b) = a;
如果您真的需要对指针的非常量引用,则必须引入指针变量:
double* pa = a;
double* (&b) = pa;
在这个程序中,使用了一个数组指针:
//#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();
}
在某些编译器中,比较&a
and a
是允许的。例如,这段代码可以在(旧的)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};
您可以获得指向第一个元素的指针:
double * b = a;
或const
对指向它的未命名指针的引用:
double * const & b = a;
或对数组的引用:
double (&b)[5] = a;
但是如果没有要const
引用的指针变量,就无法获得对指针的非引用。
正如其他人所说,您不需要对指针的引用,只需使用指向双精度的指针即可。
double *b = a;
您不能分配a
给指针引用的原因是因为从双精度数组到双精度指针的静默转换会产生右值。
如果必须使用对指针的引用,则应使其成为对 const 指针的引用,const 引用可以绑定到右值:
double a[5];
double * const &b = a;