今天在工作中发现了关于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,但不具有值传递功能