我正在使用指针数组进行练习。 我写了一个简单的代码。
#include<iostream>
using namespace std;
int main(){
int a[3]={1,2,3};
int *b[3];
for(int i=0; i<3; i++){
b[i] = &a[i];
}
cout<<b; //This gives a confusing output
cout<<endl;
for(int i=0; i<3; i++){
cout<<b[i];
cout<<endl;
}
}
和输出是
0x6ffe10
0x6ffe30
0x6ffe34
0x6ffe38
现在我不明白b指向哪里。 我知道这听起来很奇怪,但我想知道。 b指针指向的位置。 b [0],b [1],b [2]给出了预期的结果。
答案 0 :(得分:4)
b
是 {em> int
的指针数组。它的地址是第一个指针的地址。
b[0]
被分配了元素a[0]
的地址(因此b[0]
指向1
)。 b[1]
分配了 {em> a[1]
的地址(因此b[1]
指向2
)b[2]
分配了 {em> a[2]
的地址(因此b[2]
指向3
)在每种情况下,b
数组中的指针都保存a
中相应元素的地址。因此,如果在循环中将a
中的地址分配给a
后对b
的元素进行了任何更改,则{{ 1}}将更改,但是b
所保存的该值的地址将保持不变。
答案 1 :(得分:3)
b
是指向int
的指针的数组,该指针是堆栈上的局部变量。
其地址不取决于其数组分配给哪些元素。
如果在for
循环之前(在其中为其成员分配值),在之前打印其值,您将看到它与在之后< / strong> for
循环。
观看现场演示here。
图片上:
答案 2 :(得分:3)
将b
传递给cout
的{{1}}运算符时,它会衰减为一个指针。因此,就打印功能而言,打印<<
与打印b
相同。
因此,&b[0]
打印出cout << b;
数组中第一个指针的地址。 (请注意,指针的地址与指针指向的地址不是相同!这可能会引起混淆,请记住,指针变量是变量同样,与其他任何变量一样,它在内存中具有自己唯一的位置,这与它所指向的位置不同)
答案 3 :(得分:2)
b整个数组的内存地址。