一维数组名的含义
除了两种特殊情况,一维数组名都是指向数组的第一个元素的指针。
- 特殊情况一:sizeof(数组名) [统计数组长度]
- 特殊情况二:&数组名 [对数组名取地址,得到的是数组指针,数组指针的步长为整个数组的长度]
数组名是指针常量(int * const),指针的指向不可以修改,指针指向的值可以修改
#include <stdio.h>
// int arr[] 等价于 int *arr
// int arr[] 的可读性更好
void printfArr(int arr[], int len)
{
for (int ii = 0; ii < len; ++ii)
{
printf("%d\n", arr[ii]);
}
}
int main()
{
int arr[5] = {1, 2, 3, 4, 5};
int len = sizeof(arr)/sizeof(int);
printfArr(arr, len);
return 0;
}
扩展–区分指针常量和常量指针
#include <stdio.h>
int main()
{
int a = 10;
// 1.指针常量
// p1是一个指针常量,指针的指向不可以修改,但是可以修改指针指向的值
int * const p1 = &a;
//p1 = NULL; // 指针的指向不可以修改
*p1 = 1000; // 可以修改改指针指向的值
printf("a = %d\n", a);
int b = 10;
// 2.常量指针
// p2是一个常量指针,指针的指向可以修改,但是不可以修改指针指向的值
int const *p2 = &b;
p2 = NULL; // 指针的指向可以修改
//*p2 = 1000; // 不可以修改指针指向的值
printf("p2 = %p\n", p2);
return 0;
}
记忆方法
int * const 指针常量
即 * 指针在前 const 常量在后,即为指针常量。
在前的不可以修改,即指针不可以修改,即指针的指向不可以修改。
int const * 常量指针
即 const 常量在前 * 指针在后,即为常量指针。
在前的不可以修改,即常量不可以修改,即指针指向的值不可以修改。