作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
数组现在由单个指针指向。双指针指向单指针。我正在尝试使用这个双指针获取数组的值。到目前为止,我仅通过双指针获取了数组的第一个索引值。我知道,如果我取消引用(*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)
的地址是相同的。第二次垃圾值,然后段错误(核心转储)。
我想到一个猜测,ptr1
和 ptr2
都是 int
类型,但一个指向变量,另一个指向变量指针。所以也许从一开始就有一个内存分配的概念,我就跳过了。
有什么方法可以使用上述结构获取数组的值吗?
最佳答案
ptr2
指向 ptr1
。 (ptr2+j)
,当 j
不是 0
时,是您尚未分配的地址,因此取消引用它 (*( ptr2+j)
) 使您的程序具有 undefined behavior出现段错误是一种可能的结果。
您应该首先取消引用它,然后索引:(*ptr2)[j]
或 *((*ptr2)+j)
(如果您愿意)。
关于c++ - 双指针如何从单指针获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63983399/
我是一名优秀的程序员,十分优秀!