指向数组基地址的指针而不是指向第一个元素的指针有什么好处?

问题描述 投票:-2回答:1

下面是一个代码片段,显示了一个指向数组基数的指针和一个指向元素的指针;

1st case:
/* Pointer to an array of 10 integers */
int arr[10]
int (*ptr)[10];
ptr = & arr; //points to the base address of an array of 10 integers
for (i = 0; i < 10; i++) //prints the values
    printf("%d\n", *(*ptr + i)); 

2nd case:
/* Pointer to an array element*/
int arr[10];
int *ptr;
ptr = arr;  //Points to the first element of an array
for (i = 0; i < 10; i++) //prints the values
{
    printf("%d\n", *ptr);
    ptr ++;
}

我了解在两种情况下访问值的区别。但是我不明白使用第一种情况,即即使第二种情况看起来很简单,指向10个整数数组的指针也有什么好处。

c++ c arrays pointers
1个回答
1
投票

没有优势。用于访问数组arr的元素的指针的类型只是不同。

在第一种情况下,ptr的类型为int (*)[10]

在第二种情况下,ptr的类型为int *


[ptr = arr;-arr衰减为指向arr的第一个元素的指针(类型int*)。

[ptr = &arr;-&arr是指向int的10个元素的数组(类型int (*)[10])的指针。


如果在第一个示例中增加ptr,则指针将指向数组之后的存储位置。取消引用该指针会调用未定义的行为。

虽然在第二个示例中,当您增加ptr时,ptr只会指向另一个char元素。

© www.soinside.com 2019 - 2024. All rights reserved.