C语言中对数组进行解引用的几种常见写法

目录

1.对数组进行解引用

1.1使用数组名+索引(常用)

1.2使用指针+索引(常用)

1.3使用数组名+指针算术

2.对数组进行解引用遍历

2.1 使用数组名+索引遍历(最常用)

2.2 使用指针+索引遍历(分两种写法,常用)

 2.2.1 基本指针遍历(没有移动指针位置)

 2.2.2指针递增遍历

2.3  使用数组名+指针算术遍历(没有移动指针位置)

3.在函数参数中使用指针

3.1 数组名+索引遍历

3.2 指针递增遍历

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语言期末考试中看实际情况写编程题或者函数题用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千谦阙听

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值