C++ c++;,操纵指向数组第一个元素的指针
我已经编写了一个小代码来快速解释我的问题:C++ c++;,操纵指向数组第一个元素的指针,c++,arrays,pointers,element,C++,Arrays,Pointers,Element,我已经编写了一个小代码来快速解释我的问题: #include<iostream> using namespace std; int main() { int a [10] = { 200, 60, 100, 70, 0, 0, 105, 400, 450, 30}; int *b = &a[0]; int *c = &a[9]; int *d = b+9; cout<<&a
#include<iostream>
using namespace std;
int main()
{ int a [10] = { 200, 60, 100, 70, 0, 0, 105, 400, 450, 30};
int *b = &a[0];
int *c = &a[9];
int *d = b+9;
cout<<&b[9]<<endl
<<c<<endl
<<d<<endl;
return 0;
}
#包括
使用名称空间std;
int main()
{inta[10]={200,60,100,70,0,0,105,400,450,30};
int*b=&a[0];
int*c=&a[9];
int*d=b+9;
cout
- b是整数*
- b+9是整数*
- *(b+9)是整数
- b[9]为int(同上)
- &b[9]是整数*
- *(&b[9])是int
- b是整数*
- b+9是整数*
- *(b+9)是整数
- b[9]为int(同上)
- &b[9]是整数*
- *(&b[9])是int
b[9]
根据定义是*(b+9)
。也就是说,数组运算符将索引和指针求和,然后取消对该指针的引用
因此:
都是正确的语句。b[9]
根据定义是*(b+9)
。也就是说,数组运算符将索引和指针相加,然后取消对该指针的引用
因此:
都是正确的语句。b[9]
是数组的最后一个元素
&b[9]
是指向此元素的指针
b+9
相当于&b[9]
表单。b[9]
是数组的最后一个元素
&b[9]
是指向此元素的指针
b+9
相当于&b[9]
表单。数组下标运算符包含一个解引用,这就是为什么需要使用运算符的地址再次获取指针的原因
b[9]
与*(b+9)
的定义相同。数组下标运算符包含一个解引用,这就是为什么需要使用运算符的地址再次获取指针的原因
b[9]
与*(b+9)
的定义相同。b[9]怎么可能是int&b[9]?如果在上面的脚本中替换它,b[9]和&b[9]是两个不同的东西。令人困惑的是,它是&b[9]指向原始数组a的最后一个元素,而不是b[9]。b[9]是int,&b[9]是int*;p[i]与*(p+i)相同。b[9]怎么可能是int[9] be int&b[9]?如果在上面的脚本中替换它,b[9]和&b[9]是两个不同的东西。令人困惑的是,它是&b[9]指向原始数组的最后一个元素a,而不是b[9]。b[9]是int,&b[9]是int*;p[i]与*(p+i)b[9]指向a[9]。b指向a[0],与b[0]一样。当你在指针上加一个下标时,下标会被加到指针上。当你加载指针时,这就是你使用运算符地址的时候。(只是为了进一步混淆,int*0[b]也指向a[0]。@PeteWilson:b[9]实际上并不指向任何东西,因为指针指向任何东西。b[9]指向a[9].b指向a[0],b[0]也指向a[0]。当您在指针上放置下标时,下标将添加到指针上。当您加载指针时,即使用运算符的地址。(只是为了进一步混淆,int*0[b]也指向a[0])@PeteWilson:b[9]没有真正指向任何东西,在某种意义上,指针指向事物。这就是我错过的。谢谢你澄清它。这就是我错过的。谢谢你澄清它。
b[9] == a[9]
b+9 == &(a[9])