首页 > 解决方案 > (*pointer)[] 和 *pointer 有什么区别?

问题描述

我有一个关于使用指针的问题。你能告诉我这两个指针之间的区别吗?

int array[10] = {1, };
int (*pointer1)[10] = &array;
int *pointer2 = array;

我很困惑,因为这两个指针可以做完全相同的事情......比如访问像pointer1[0]or这样的元素pointer2[0],我理解它pointer2是一个元素指针,pointer1是一个指向整个数组的指针。但是我不知道为什么程序员要区分这两者。

标签: carrayspointers

解决方案


在大多数情况下,数组名称衰减为指针。简单来说,数组名称被转换为指针。这就是您可以使用指针访问数组元素的原因。但是,您应该记住,指针和数组并不相同。

因为can 中的数组C衰减为具有相同数据类型的指针,(并且数组的名称可以衰减为数组的地址或第一个元素的地址相同)

我们可以写:

int* ptr = array;

ptr 是指向数组开始的新数据类型。

现在有什么共同点: pointer1pointer 2在内存中保持相同的地址指向相同的地址。

但它们之间有一些区别:

pointer1是指向 10 种整数数据类型的数组的指针,其中pointer2是指向一种整数数据类型的指针。

derefrence指针: pointer2deref 到一种 int 数据类型,其中pointer1deref 到 10 个 int 的数组。所以我们可以这样做pointer1

(*pointer1)[5]=1000;

但这将在pointer2.

等价的pointer2将是:

*(pointer2+5)=1000;

指针算术对两者都有效,但增量的结果不同:

int* ptr_new = pointer1 + 1; 

递增pointer1sizeof the whole array10 个整数),现在 ptr_new 指向最后一个元素。

int* ptr_new = pointer2 + 1;

递增pointer2sizeof(int)现在 ptr_new 指向second数组中的元素。


推荐阅读