【发布时间】:2021-01-07 00:35:43
【问题描述】:
一个数组现在由一个指针指向。双指针指向单指针。我正在尝试使用此双指针获取数组的值。到目前为止,我只通过 双指针 获取了数组的第一个索引值。
我知道如果我取消引用 (*ptr2) 双指针,那么它将给出第一个指针指向的地址 (ptr1),这意味着数组的第一个索引地址 (&array[0])。
#include <iostream>
using namespace std;
int main(){
int array[5]{15,25,35,45,55};
int* ptr1;
int** ptr2;
ptr1 = &array[0];
ptr2 = &ptr1;
在下面的 for 循环中,我尝试使用指针 ptr1 打印 array 的值。
for(int i =0; i<5; i++){
cout<<"the value: "<<*(ptr1+i)<<" lives at "<<ptr1+i<<" address\n";
}
cout<<"\n";
在下面的 for 循环中,我尝试检查 *ptr2 是否一直给我 ptr1 指向的地址。但我发现它只对第一个索引有效/相同,然后它是 (*ptr2) 给我一个不同的地址
for(int j=0; j<5; j++){
cout<<"adress of array: "<<&array[j]<<" , ptr1: "<<(ptr1+j)<<" , val of ptr2: "<<*(ptr2+j)<<endl;
}
cout<<"\n";
return 0;
}
虽然我尝试使用 **ptr2+i 使用 for 循环从 ptr2 获取值,但它只持续了 2 次。第一次正确的值很明显,因为我看到array[0] 和*(ptr2+0) 的地址相同。第二次垃圾值,然后 Segmentation fault (core dumped)。
我想到了一个猜测,ptr1 和 ptr2 都是 int 类型,但一个指向变量,另一个指向指针。所以也许从一开始就出现了一个内存分配的概念,我被跳过了。
有什么方法可以使用上述结构获取数组的值?
【问题讨论】:
标签: c++ pointers double-pointer