#include <stdio.h>
void test(){
//数组名是一个指针常量,指向的是第一个元素的地址
//当数组名作为sizeof操作符或单目操作符&的运算数时,不用指针常量来表示,
//sizeof返回数组的长度,取一个数组名的地址所产生的是一个指向数组的指针
int array[5] = {7, 8, 3, 2, 6};
int* p = (int*)(array + 1); //array为指向数组第一个元素的指针常量,然后加一,相当于向后移动一个int的位置
int* m = (int*)(&array + 1);
//&array,取一个数组名的地址所产生的是一个指向数组的指针,然后加一,相当于向右移动了一个数组的长度(20字节),
//之后强转为int*,那么在下面的输出中,m-1,相当于向左移动了4个字节,也就是指向数组的最后一个位置
printf("%d\n", *(array + 1)); // 输出8
//array+1指向数组第一个元素向后移动1个整数长度的位置,然后间接访问这个位置的值,即8
printf("%d\n", *(p + 1)); // 输出3
//p指向的是数组的第二个位置,然后+1,相当于又向后移动1个整数长度的位置,然后间接访问这个位置的值,即3
printf("%d\n", *(m - 1)); // 输出6
}
int main(){
test();
return 0;
}
C语言的数组名
最新推荐文章于 2024-05-05 13:39:27 发布