一位数组名称

  • 本质并不是一个指针

有两种特殊情况:

  • 对数组名称进行sizeof
  • 对数组名称 取地址,获取的指针步长是整个数组长度

除了两种特殊情况外,都是指向数组中首元素的地址的指针

数组名称—指针常量,指针的指向不可以修改

如果将数组名传入到函数参数中,为了提高可读性通常写为:int arr[]

访问数组元素时候,下标可以为负数

代码示例:

#define
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void printArray(int arr[], int len)//int arr[]等价于int*arr
{
for (int i = 0; i < len; i++)
{
//printf("%d\n",arr[i]);//给人看
printf("%d\n",*(arr+i));//给机器看
}
}
void test01()
{
int arr[5] = {1,2,3,4,5};
//一堆数组名称 是不是指针
printf("sizeof arr=%d\n",sizeof(arr));
//除了两种特殊情况下,一维数组名称都是指针首元素的地址
//特殊情况1:对数组名称进行sizeof
//特殊情况2:对数组名称 取地址
///int *p=&arr;
printf("%d\n",&arr);
printf("%d\n",&arr+1);
//int *p = arr;
//数组名称 指针常量 指针的指向不可以修改的 int*const p
//arr = NULL;
//arr[0] = 100;
int len = sizeof(arr) / sizeof(int);
printArray(arr,len);
int*p = arr;
p = p + 3;
//[]里面可以放负数
printf("%d\n",p[-1]);
printf("%d\n",*(p-1));
}
int main()
{
test01();
return EXIT_SUCCESS;
}

更多文章,敬请关注微信公众号:YQ编程