Cprogramming 简明教程
Pointer to an Array in C
数组名是数组第一个元素的常量指针。因此,在此声明中,
int balance[5];
balance 是指向 &balance[0] 的指针,即数组第一个元素的地址。
Example
在此代码中,我们拥有一个指针 ptr ,它指向名为 balance 的整数数组第一个元素的地址。
#include <stdio.h>
int main(){
int *ptr;
int balance[5] = {1, 2, 3, 4, 5};
ptr = balance;
printf("Pointer 'ptr' points to the address: %d", ptr);
printf("\nAddress of the first element: %d", balance);
printf("\nAddress of the first element: %d", &balance[0]);
return 0;
}
Array Names as Constant Pointers
将数组名用作常量指针,反之亦然,这是合法的。因此, *(balance + 4) 是访问 balance[4] 处数据的合法方式。
一旦您在“ ptr ”中存储第一个元素的地址,您便可以使用 ptr 、 (ptr + 1) 、 *(ptr + 2) 等来访问数组元素。
Example
以下示例演示以上讨论的所有概念 −
#include <stdio.h>
int main(){
/* an array with 5 elements */
double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};
double *ptr;
int i;
ptr = balance;
/* output each array element's value */
printf("Array values using pointer: \n");
for(i = 0; i < 5; i++){
printf("*(ptr + %d): %f\n", i, *(ptr + i));
}
printf("\nArray values using balance as address:\n");
for(i = 0; i < 5; i++){
printf("*(balance + %d): %f\n", i, *(balance + i));
}
return 0;
}
当你运行这段代码时,它将产生以下输出:
Array values using pointer:
*(ptr + 0): 1000.000000
*(ptr + 1): 2.000000
*(ptr + 2): 3.400000
*(ptr + 3): 17.000000
*(ptr + 4): 50.000000
Array values using balance as address:
*(balance + 0): 1000.000000
*(balance + 1): 2.000000
*(balance + 2): 3.400000
*(balance + 3): 17.000000
*(balance + 4): 50.000000
在上面的示例中, ptr 是一个指针,可以存储 double 类型的变量地址。一旦我们获得 ptr 中的地址, *ptr 便会给我们存储在 ptr 中的地址中可用的值。