我试图通过使用指针
来引用数组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绑定到数组第一个元素的地址?
谢谢!
答案 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();
}
在某些编译器中,允许&a
和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};
答案 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
引用。