网站发展历程,爱尚网站建设,seo关键词智能排名,大连微信公众号开发公司目录
1.知识回顾
2.范围for
格式
使用
运行结果 运行过程
范围for的本意
作用
注意
3.底层分析范围for的执行过程
反汇编代码
分析
4.auto关键字
格式
基本用法
在范围for中使用auto 1.知识回顾
for循环的使用参见25.【C语言】循环结构之for文章
2.范围for
C…目录
1.知识回顾
2.范围for
格式
使用
运行结果 运行过程
范围for的本意
作用
注意
3.底层分析范围for的执行过程
反汇编代码
分析
4.auto关键字
格式
基本用法
在范围for中使用auto 1.知识回顾
for循环的使用参见25.【C语言】循环结构之for文章
2.范围for
C11中引入范围for
格式
for ( 类型 变量名 : 数组名 )
{//......
}
使用
#include iostream
using namespace std;
int main()
{int arr[10] { 1,2,3,4,5,6,7,8,9,10 };for (int a : arr){cout a ;}return 0;
}
运行结果 运行过程
范围for的本意
将arr数组中的元素,依次放在a变量中
作用
遍历容器如数组、vector和list等
注意
1.变量的类型和数组的类型要匹配
2.其对数组中所有元素进行遍历的,但是实际在做题的 过程中可能只需要遍历数组中指定个数的元素,此时范围fo不合适
3.范围for不能修改数组元素
3.底层分析范围for的执行过程
运行环境:debugx86
打开VS2022,先在代码生成中改动两个地方 反汇编代码
#include iostream
using namespace std;
int main()
{push ebp mov ebp,esp sub esp,78h push ebx push esi push edi mov ecx,offset _2A500742_leetcodecpp (03AE068h) call __CheckForDebuggerJustMyCode4 (03A1389h) nop int arr[10] { 1,2,3,4,5,6,7,8,9,10 };mov dword ptr [arr],1 mov dword ptr [ebp-24h],2 mov dword ptr [ebp-20h],3 mov dword ptr [ebp-1Ch],4 mov dword ptr [ebp-18h],5 mov dword ptr [ebp-14h],6 mov dword ptr [ebp-10h],7 mov dword ptr [ebp-0Ch],8 mov dword ptr [ebp-8],9 mov dword ptr [ebp-4],0Ah for (int a : arr)lea eax,[arr] mov dword ptr [ebp-2Ch],eax mov eax,dword ptr [ebp-2Ch] mov dword ptr [ebp-30h],eax mov eax,dword ptr [ebp-2Ch] add eax,28h mov dword ptr [ebp-34h],eax jmp main7Ah (03A192Ah) mov eax,dword ptr [ebp-30h] add eax,4 mov dword ptr [ebp-30h],eax mov eax,dword ptr [ebp-30h] cmp eax,dword ptr [ebp-34h] je main8Ch (03A193Ch) mov eax,dword ptr [ebp-30h] mov ecx,dword ptr [eax] mov dword ptr [ebp-38h],ecx {}jmp main71h (03A1921h) return 0;xor eax,eax
}pop edi pop esi pop ebx mov esp,ebp pop ebp ret
分析
上方代码较为复杂,见105.5【x86汇编】底层分析范围for的执行过程
4.auto关键字
之前在C语言的16.【C语言】初识常见关键字 上文章中提到过auto的一点内容
节选内容 auto自动每个局部变量都由auto修饰含义自动创建自动销毁 auto int a0;等价于int a0; 但本文讲的auto与上方不同,其让可让编译器自动推导出变量的类型
格式
auto 变量名 变量值;
基本用法
#include iostream
using namespace std;
int main()
{auto a 1;auto b 1.2;auto c c;return 0;
}
将下列代码用VS2022打开
鼠标放在变量值旁边,会自动显示变量的类型 在范围for中使用auto
直接让编译器推测a的类型,不用手动分析
#include iostream
using namespace std;
int main()
{int arr[10] { 1,2,3,4,5,6,7,8,9,10 };for (auto a : arr){cout a ;}return 0;
}