1.对数组进行解引用
1.1使用数组名+索引(常用)
该方法是最常见,也是最基本的,用数组名加下标来找到数组对应的元素
int main()
{
int arr[5] = { 1,2,3,4,5 };
int ret = arr[2];
printf("%d\n",ret);
return 0;
}
上面的代码中,数组的下标是0~4,通过arr[2],找到对应的元素应该就是3
1.2使用指针+索引(常用)
这也是比较常见的写法,一般就是使用第一种或者这种,个人推荐
数组名在C语言中实际上是一个指向数组首元素的指针常量,所以通过将数组名转化成指针来访问数组内部。
int main()
{
int arr[] = { 1,2,3,4,5 ,6,7,8,9};
int* ptr = arr;//指针ptr存放arr的首元素地址,也就是ptr指向arr首元素
printf("%d",*(ptr+3));
这里,*(ptr+2)是通过指针ptr+2来访问arr中索引为2的元素,ptr一开始指向arr首元素,+2即向后移动2个单位后所指向的元素,即被赋值为3 。
1.3使用数组名+指针算术
数组名本身是一个指针常量,不可被赋值,但可以用它来进行指针+-整数运算,其实与第二种方法一样,就是更直接使用了数组名
int main()
{
int arr[] = { 1,2,3,4,5 ,6,7,8,9 };
printf("%d",*(arr+3));
return 0;
}
*(arr+3)表示对数组arr的首地址偏移2个单位后所指的元素进行解引用。
2.对数组进行解引用遍历
2.1 使用数组名+索引遍历(最常用)
最直接的方法,通过数组索引来遍历访问。当然也可以写成*(arr+i)的形式。
int main()
{
int arr[5] = { 1,2,3,4,5 };
int i = 0;
for ( i = 0; i < 5; i++)
{
printf("%d\n", arr[i]);
}
return 0;
}
2.2 使用指针+索引遍历(分两种写法,常用)
2.2.1 基本指针遍历(没有移动指针位置)
int main()
{
int arr[] = { 1,2,3,4,5 ,6,7,8,9};
int* ptr = arr;//指针ptr存放arr的首元素地址,也就是ptr指向arr首元素
int sz = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i <sz ; i++)
{
printf("%d ",*(ptr+i));
}
return 0;
}
在上面的代码中,其实ptr指针的位置一直指向的是arr数组首元素地址,通过不断+i的偏移量来访问数组遍历,
2.2.2指针递增遍历
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9 };
int* ptr = arr;
int sz = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < sz; i++)
{
printf("%d ", *ptr++);
}
return 0;
}
把arr首元素地址存在指针变量ptr里,使用ptr指针来遍历数组,指针最初指向首元素,然后指针ptr++,递增访问后续元素。
2.3 使用数组名+指针算术遍历(没有移动指针位置)
int main()
{
int arr[] = { 1,2,3,4,5 ,6,7,8,9 };
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
for ( i = 0; i < sz; i++)
{
printf("%d ",*(arr+i));
printf("%p\n",(arr+i));//数组首元素的地址,依次加+i哥偏移量
}
return 0;
}
与第二种方法的基本指针遍历道理一样,只是更为直接使用了数组名来解引用,其实arr[i]和*(arr+i)是相等的,所以也可以算是第一种的变形。
3.在函数参数中使用指针
数组作为函数传参时,其实传的是指向首元素的指针,通过指针+索引访问
需要注意的是需要定义长度,因为在函数内部使用sizeof(arr)/sizeof(arr[0])时,这个时候的arr已经不代表整个数组,所以sizeof计算的也不是整个数组大小,而是计算的传过来arr这个指针变量的大小,是4个字节。
3.1 数组名+索引遍历
void Print(int* arr, int sz);
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
Print(arr,sz);
return 0;
}
void Print(int* arr, int sz)
{
int i = 0;
for ( i = 0; i < sz; i++)
{
printf("%d", arr[i]);
}
}
3.2 指针递增遍历
void Print(int* arr, int sz);
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int sz = sizeof(arr) / sizeof(arr[0]);
Print(arr, sz);
return 0;
}
void Print(int* arr, int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{ printf("%d ", *arr);
arr++;
}
}
以上就是如何对数组进行解引用操作和遍历数组的常用写法总结,当然还有其他各种复杂的写法,考虑常见的和运行效率更好,并且可读性高,这里推荐这几种。可以直接索引遍历也可以通过指针遍历,原理是arr数组名大部分情况=数组首元素的地址,所以将数组名转变为指针来访问。
· ps:需要的小伙伴们可以用于c语言期末考试中看实际情况写编程题或者函数题用
标签:sz,arr,int,C语言,数组名,数组,写法,ptr,指针 From: https://blog.csdn.net/2301_76684563/article/details/144485733