在之前的Pointers教程中,您了解到指向给定数据类型的指针可以存储该特定数据类型的任何变量的地址。例如,在以下代码中,指针变量pc存储字符变量的地址c。
char c = 'A';
char *pc = &c;
这c是一个只能存储单个值的标量变量。但是,您已经熟悉可以在连续分配的内存块中保存相同数据类型的多个值的数组。所以,您可能想知道,我们是否也可以指向数组?的确,我们可以。
让我们从示例代码开始,看看它的输出。我们将在后面讨论它的行为。
char vowels[] = {'A', 'E', 'I', 'O', 'U'};
char *pvowels = &vowels;
int i;
// Print the addresses
for (i = 0; i < 5; i++) {
printf("&vowels[%d]: %u, pvowels + %d: %u, vowels + %d: %u\n", i, &vowels[i], i, pvowels + i, i, vowels + i);
}
// Print the values
for (i = 0; i < 5; i++) {
printf("vowels[%d]: %c, *(pvowels + %d): %c, *(vowels + %d): %c\n", i, vowels[i], i, *(pvowels + i), i, *(vowels + i));
}
以上代码的典型输出如下所示