数组和指针的关系
数组和指针之间的关系
在本教程中,您将了解 C 编程中数组和指针之间的关系。您还将学习使用指针访问数组元素。
在了解数组和指针之间的关系之前,请务必检查以下两个主题:
- C 数组
- C 指针
数组和指针的关系
数组是一个顺序数据块。让我们编写一个程序来打印数组元素的地址。
#include <stdio.h>
int main() {
int x[4];
int i;
for(i = 0; i < 4; ++i) {
printf("&x[%d] = %p\n", i, &x[i]);
}
printf("Address of array x: %p", x);
return 0;
}
输出
&x[0] = 1450734448 &x[1] = 1450734452 &x[2] = 1450734456 &x[3] = 1450734460 Address of array x: 1450734448
数组 x 的两个连续元素之间有 4 个字节的差异 .这是因为 int
的大小 是 4 个字节(在我们的编译器上)。
注意,&x[0] 的地址 和 x 是一样的。这是因为变量名 x 指向数组的第一个元素。
<图>
从上面的例子可以清楚地看出 &x[0]
相当于 x .而且,x[0]
相当于 *x
.
同样,
&x[1]
相当于x+1
和x[1]
相当于*(x+1)
.&x[2]
相当于x+2
和x[2]
相当于*(x+2)
.- ...
- 基本上,
&x[i]
相当于x+i
和x[i]
相当于*(x+i)
.
示例 1:指针和数组
#include <stdio.h>
int main() {
int i, x[6], sum = 0;
printf("Enter 6 numbers: ");
for(i = 0; i < 6; ++i) {
// Equivalent to scanf("%d", &x[i]);
scanf("%d", x+i);
// Equivalent to sum += x[i]
sum += *(x+i);
}
printf("Sum = %d", sum);
return 0;
}
当你运行程序时,输出将是:
Enter 6 numbers: 2 3 4 4 12 4 Sum = 29
在这里,我们声明了一个数组 x 6 个元素。为了访问数组的元素,我们使用了指针。
在大多数情况下,数组名称衰减为指针。简单来说,数组名称被转换为指针。这就是您可以使用指针访问数组元素的原因。但是,您应该记住,指针和数组并不相同 .
在少数情况下,数组名称不会衰减为指针。了解更多,请访问:数组名何时不会衰减为指针?
示例 2:数组和指针
#include <stdio.h>
int main() {
int x[5] = {1, 2, 3, 4, 5};
int* ptr;
// ptr is assigned the address of the third element
ptr = &x[2];
printf("*ptr = %d \n", *ptr); // 3
printf("*(ptr+1) = %d \n", *(ptr+1)); // 4
printf("*(ptr-1) = %d", *(ptr-1)); // 2
return 0;
}
当你运行程序时,输出将是:
*ptr = 3 *(ptr+1) = 4 *(ptr-1) = 2
在此示例中,&x[2]
,第三个元素的地址,分配给 ptr 指针。因此,3
在我们打印 *ptr
时显示 .
并且,打印 *(ptr+1)
给了我们第四个元素。同样,打印 *(ptr-1)
给了我们第二个元素。
C语言