上一篇文章中已经揭露了数组名的真身,数组名是一个指向数组首元素的常量指针,也就是数组首元素的内存地址值,并且一般情况下他的值是不允许改变的,以下是数组名可以当作指针使用的情况
1.当数组名作为一个参数传递给函数时,它将被自动转换为一个指向数组第一个元素的指针。
演示代码:
#include<stdio.h>
void func(int arr[])
{
int i=0;
for(i=0;i<5;i++){
printf("%d\n",*arr);//这里的数组名名被当作指向数组首地址的指针变量传入到函数内
//可以直接把数组名当作指针使用,而此时在主函数的数组名是不能当指针变量使用的
arr++;
}
}
int main()
{
int arr[5]={1,2,3,4,5,};
func(arr);
}
运行结果:
这里如果是在主函数中把数组名当指针变量使用是不被允许的,因为此处数组不是通过传参来的,他就是一个指针常量,不允许修改,不信看代码。
int main()
{
int arr[5]={1,2,3,4,5,};
int i;
for(i=0;i<5;i++){
printf("%d",*arr);
arr++;
}
// func(arr);
}
运行结果:
2. 数组名可以用于赋值给指针变量。
int main() {
int arr[] = {1, 2, 3, 4, 5};
int *ptr = arr;
for (int i = 0; i < 5; i++) {
printf("%d ", *(ptr + i));
}
return 0;
}
3. 数组名可以用于指针运算。
这里的数组名也是指针常量不允许被修改
int main() {
int arr[] = {1, 2, 3, 4, 5};
int *ptr = arr;
for (int i = 0; i < 5; i++) {
printf("%d ", *(arr + i));
}
return 0;
}
4.数组名可以用于赋值操作。
int main() {
int arr1[] = {1, 2, 3, 4, 5};
int arr2[]
arr2[]=arr1[];
return 0;
}
目录