下面是一个代码片段,显示了一个指向数组基数的指针和一个指向元素的指针;
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个整数数组的指针也有什么好处。
没有优势。用于访问数组arr
的元素的指针的类型只是不同。
在第一种情况下,ptr
的类型为int (*)[10]
。
在第二种情况下,ptr
的类型为int *
。
[ptr = arr;
-arr
衰减为指向arr
的第一个元素的指针(类型int*
)。
[ptr = &arr;
-&arr
是指向int
的10个元素的数组(类型int (*)[10]
)的指针。
如果在第一个示例中增加ptr
,则指针将指向数组之后的存储位置。取消引用该指针会调用未定义的行为。
虽然在第二个示例中,当您增加ptr
时,ptr
只会指向另一个char
元素。