指向指针的指针如何能够引用数组
how a pointer to pointer is able to refer the array
#include<cstdio>
int main() {
int a[5] = {1,2,3,4,5};
int *ptr = (int*)(&a+1);
printf("%d %d" ,*(a+1),*(ptr-1));
}
在这里,A+1 的地址位置被类型转换为点 PTR;
我已经尝试过 ptr = (int(&a 它指向数组。由于指针地址存储在某个位置,指针 PTR 指向该位置它如何使用 *PTR 引用数组元素的位置
程序的输出为2 5你能解释一下 5 是如何输出的吗
由于 a
是一个 5 个整数的数组,&a
是一个指向 5 个整数数组的指针。由于指针算术对指向类型大小的倍数进行操作,因此&a+1
是指向存储在 a
中的整数之后的 5 个整数的虚构数组的指针。当您将其转换为指向 int 的指针并存储在 ptr
中时,您将获得指向该数组中第一个 int 的指针。
换句话说,
int *ptr = (int*)(&a+1);
相当于
int *ptr = (a + 5);
这使得*(ptr-1)
与*(a+4)
相同,与a
的最后一个元素a[4]
相同。
数组的名称是地址。因此,&a
和a
具有相同的价值。 &a
计算到相同的地址,并创建一个类型为 int(*)[size]
的指针,该指针是指向数组的指针,而不是指向单个元素的指针。如果递增此指针,它将添加整个数组的大小,而不是单个元素的大小。
int * ptr = &a[0]; PTR 现在指向数组的第一个元素 (1( PTR + 1 指向 2,依此类推。
相关文章:
- 如何使用基类指针引用派生类成员
- 将常量指针引用绑定到非常量指针
- 如果非动态变量被指针引用,何时超出范围?
- 转换指针引用的字符串
- 指针引用的生存期(以 C++为单位)
- 从 unique_ptr::get 发送指针作为指针引用进入函数
- 指针/引用的 CLion 格式
- 使用模板专用化来比较指针引用
- 如何保存指向抽象基类的指针/引用,但在 c++ 中仍然可以复制
- C++初始化指针/引用/复制细微差别
- 用数组或指针引用函数?
- 指针范围问题和返回类中封装的指针向量内的指针引用
- 强制转换为指针引用是否会导致未定义的行为
- 访问由 void 指针引用的结构的成员
- C 为什么当先前的步骤引发异常时,std :: shared_ptr的指针引用会被破坏
- 动态指针引用数组由三元运算符返回值,但有异常
- 悬空指向 int 和 char* 常量的指针/引用
- C++ 二维数组和指针引用
- 通过使用指针/引用,在C++中使用向量加快计算速度
- C++非类型模板模板到函数指针/引用