先上代码
#include <stdio.h>
#define SIZE 4
int main(void)
{
int nums[SIZE] = { 1, 2, 4, 8 };
printf("数组名:%p\n", nums);
printf("数组首元素地址:%p\n", &nums[0]);
return 0;
}
输出结果为:
数组名:00000024fe3ff7f0
数组首元素地址:00000024fe3ff7f0
从代码的执行结果能看出数组名其实就是数组首元素的地址。数组名表示的是一个地址,而指针存储的也是一个地址,这表明数组名其实就是指针的一种特殊使用形式。
那么执行
printf("数组地址+1指向的值:%d\n", *(nums + 1));
会发生什么呢?
数组地址+1指向的值:2
从结果看,指针+1其实就是从当前位置向后移动一个存储单元。nums为首元素,那么nums + 1指向的就是数组第二个元素的地址,对应的值就是2。
nums+2 = &nums[2];
*(nums+2) = nums[2];
同理,nums+2就是nums向后移动两个存储单元的地址,即为&nums[2]。
每天进步一丢丢~~~~