for(auto&p:b)循环的非常规用法

今天在工作中发现了关于for循环一个另类的写法:

#include<iostream>


void init_a(int arr[])	//初始化传入的数组
{
	
	for(int i = 5;i >=0;i--)
	{
		arr[i] = i;

		std::cout<<"初始化"<<arr[i]<<std::endl;
	}
}


int main()
{
	
int a[5];

init_a(a);


std::cout<<"use auto & ptr:================================================================="<<std::endl;
				for(auto  &ptr :a)
				{
					ptr +=100;
					std::cout<<"ptr="<<ptr<<std::endl;
				
				}

				for(int j=0;j<5;j++)
				{
				std::cout<<"a[after auto ptr] = "<<a[j]<<std::endl;
				}

std::cout<<"use auto  ptr1:================================================================="<<std::endl;
init_a(a);
				for(auto  ptr1 :a)
				{
					ptr1 +=100;
					std::cout<<"ptr1="<<ptr1<<std::endl;
				}
				
				for(int j=0;j<5;j++)
				{
				std::cout<<"a[after auto &ptr1] = "<<a[j]<<std::endl;
				}

}


得到结果:

初始化5
初始化4
初始化3
初始化2
初始化1
初始化0
use auto & ptr:=================================================================
ptr=100
ptr=101
ptr=102
ptr=103
ptr=104
a[after auto ptr] = 100
a[after auto ptr] = 101
a[after auto ptr] = 102
a[after auto ptr] = 103
a[after auto ptr] = 104
use auto  ptr1:=================================================================
初始化5
初始化4
初始化3
初始化2
初始化1
初始化0
ptr1=100
ptr1=101
ptr1=102
ptr1=103
ptr1=104
a[after auto &ptr1] = 0
a[after auto &ptr1] = 1
a[after auto &ptr1] = 2
a[after auto &ptr1] = 3
a[after auto &ptr1] = 4

上述代码中:对数组a进行赋值的时候我故意写成了从100->1的方式循环
我们可以看到在下面通过for(auto&ptr:a)和for(auto ptr1:a)遍历该数组的时候,又是1->100顺序遍历的
所以,大胆猜测,小心求证,经过本人研究得出结论:

for(auto & ptr :a)
{
	std::cout<<ptr<<std::endl;
}

这个代码的作用就是,顺序遍历数组a,且具有值传递功能

for(auto  ptr1 :a)
{
	std::cout<<ptr<<std::endl;
}

这个代码的作用就是,顺序遍历数组a,但不具有值传递功能


版权声明:本文为xfllllllllll原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。