指向指针的指针如何能够引用数组

how a pointer to pointer is able to refer the array

本文关键字:指针 引用 数组 何能够      更新时间:2023-10-16
#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]相同。

数组的名称是地址。因此,&aa具有相同的价值。 &a计算到相同的地址,并创建一个类型为 int(*)[size] 的指针,该指针是指向数组的指针,而不是指向单个元素的指针。如果递增此指针,它将添加整个数组的大小,而不是单个元素的大小。

int * ptr = &a[0]; PTR 现在指向数组的第一个元素 (1( PTR + 1 指向 2,依此类推。