gpt4 book ai didi

c++ - 双指针如何从单指针获取值

转载 作者:行者123 更新时间:2023-12-03 06:57:11 25 4
gpt4 key购买 nike

数组现在由单个指针指向。双指针指向单指针。我正在尝试使用这个双指针获取数组的值。到目前为止,我仅通过双指针获取了数组的第一个索引值。我知道,如果我取消引用(*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;
}

虽然我尝试使用 for 循环使用 **ptr2+i 从 ptr2 获取值,但它只持续了 2 次。第一次正确的值很明显,因为我看到 array[0]*(ptr2+0) 的地址是相同的。第二次垃圾值,然后段错误(核心转储)

我想到一个猜测,ptr1ptr2 都是 int 类型,但一个指向变量,另一个指向变量指针。所以也许从一开始就有一个内存分配的概念,我就跳过了。

有什么方法可以使用上述结构获取数组的值吗?

最佳答案

ptr2 指向 ptr1(ptr2+j),当 j 不是 0 时,是您尚未分配的地址,因此取消引用它 (*( ptr2+j)) 使您的程序具有 undefined behavior出现段错误是一种可能的结果。

您应该首先取消引用它,然后索引:(*ptr2)[j]*((*ptr2)+j)(如果您愿意)。

关于c++ - 双指针如何从单指针获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63983399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com