C++ C++;:为什么在初始化动态数组时不需要取消引用?
鉴于以下代码:C++ C++;:为什么在初始化动态数组时不需要取消引用?,c++,C++,鉴于以下代码: double** vr(new double*[nx]); vr[i]=new double[ny]; for(int i=0;i<nx;++i) { //Loop 200times for(int j=0;j<ny;++j) { //Loop 200times vr[i][j]=double(i*i*i*j*c1); } } double**vr(新的double*[nx]); vr[i]=新的双精度[ny]; for(in
double** vr(new double*[nx]);
vr[i]=new double[ny];
for(int i=0;i<nx;++i) { //Loop 200times
for(int j=0;j<ny;++j) { //Loop 200times
vr[i][j]=double(i*i*i*j*c1);
}
}
double**vr(新的double*[nx]);
vr[i]=新的双精度[ny];
for(int i=0;i下标运算符([i]
)执行解引用。它表示在i
“单元格”上移动并获取位于那里的对象。下标运算符([i]
)执行解引用。它表示在i
“单元格”上移动并获取位于那里的对象。来自
下标运算符[]
的解释方式为E1[E2]
由于转换,与*((E1)+(E2))
([expr.sub])相同
适用于+
的规则,如果E1
是数组而E2
是整数,则
E1[E2]
指E1
的E2 th
成员。因此,尽管
在不对称的情况下,下标是一种交换操作。
— 尾注 ]
因此,下标运算符运算符[]
的工作原理与使用运算符*
(一元数)进行间接寻址的工作原理相同
int a[5] = {1, 2, 3, 4, 5}; // array
int* pa = a; // pointer to a
std::cout << pa[2]; // (ans. 3) using subscript operator
std::cout << *(pa + 2); // (ans. 3) using indirection, accessing A's 3rd element
inta[5]={1,2,3,4,5};//数组
int*pa=a;//指向a的指针
std::coutFrom
下标运算符[]
的解释方式为E1[E2]
由于转换,与*((E1)+(E2))
([expr.sub])相同
适用于+
的规则,如果E1
是数组而E2
是整数,则
E1[E2]
指E1
的E2 th
成员。因此,尽管
在不对称的情况下,下标是一种交换操作。
— 尾注 ]
因此,下标运算符运算符[]
的工作原理与使用运算符*
(一元数)进行间接寻址的工作原理相同
int a[5] = {1, 2, 3, 4, 5}; // array
int* pa = a; // pointer to a
std::cout << pa[2]; // (ans. 3) using subscript operator
std::cout << *(pa + 2); // (ans. 3) using indirection, accessing A's 3rd element
inta[5]={1,2,3,4,5};//数组
int*pa=a;//指向a的指针
std::coutvr[i][j]
是一个double
而不是一个地址
基本上,如果p
属于T*
类型,则p[i]
表示*(p+i)
,属于T
类型,其中T
可以是任何类型
在你的例子中,vr
是double**
,所以vr[i]
是double*
,vr[i][j]
是double
,vr[i][j]
不是地址
基本上,如果p
属于T*
类型,则p[i]
表示*(p+i)
,属于T
类型,其中T
可以是任何类型
在你的例子中,vr
是double**
,因此vr[i]
是double*
,vr[i][j]
是double
,当你做vr[i]
时,你已经在解除引用,因为vr[i]
相当于*(vr+i)
。这意味着vr[i][j]
是双解引用,相当于*(*(vr+i)+j)
。
请参阅以获取更多信息。当您执行vr[i]
时,您已经在解除引用,因为vr[i]
相当于*(vr+i)
。这意味着vr[i][j]
是双重解除引用,相当于*(*(vr+i)+j)
。
有关更多信息,请参阅。这已经得到了很好的回答。数组索引和指针算法是用不同的语法表达的相同概念。您的问题不是初始化,而是赋值。我只是想问为什么它会取消引用?是否存在某种重载[]可能是指针类的运算符?答案差不多了。数组索引和指针算法是用不同语法表达的相同概念。你的问题不是初始化,而是赋值。我只是想问为什么它会取消引用?是否存在某种重载[]可能是指针类的运算符?我只是想问它为什么取消引用?可能是指针类有某种重载[]运算符吗?我只是想问它为什么取消引用?可能是指针类有某种重载[]运算符吗?我只是想问它为什么取消引用?是否有某种重载[]运算符可能是指针类的运算符?我只是想问它为什么取消引用?可能是指针类有某种重载[]运算符吗?我只是想问它为什么取消引用?是否有某种重载[]可能是指针类的运算符?@cLMaine这是语义。为什么+
总结?您使用了c风格的指针。它们不是类。但是,例如,unique\u ptr
重载了[]运算符。我只是想问为什么它会取消引用?是否存在某种重载[]可能是指针类的运算符?@cLMaine这是语义。为什么+
总结?您使用的是c风格的指针。它们不是类。但是,例如,unique\u ptr
重载了[]运算符。您认为@NuPagadi应该记笔记吗?谢谢!顺便问一下:)您认为@NuPagadi应该记笔记吗?顺便说一句,谢谢!:)