首页 > 代码库 > C99语法之按元素下标赋值
C99语法之按元素下标赋值
C语言C99标准中出现了一些比较奇葩的语法,比如说使用元素下标的方式了对数组进行初始化这种操作 Demo如下:
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main(int argc, char **argv) 5 { 6 int arr[] = { [0] = 1, [1] = 2, [2] = 3, [15] = 10 };//按照元素赋值 7 8 printf("%d\n",sizeof(arr)); 9 10 getchar();11 return 0;12 }
C99 中支持了这种形式的数组初始化,这段代码的执行结果是
这说明这个数组有16个int。
其反汇编的结果如下:
1 int arr[] = { [0] = 1, [1] = 2, [2] = 3, [15] = 10 };//按照元素赋值 2 00D513DE mov dword ptr [arr],1 3 00D513E5 mov dword ptr [ebp-40h],2 4 00D513EC mov dword ptr [ebp-3Ch],3 5 00D513F3 mov dword ptr [ebp-38h],0 6 00D513FA mov dword ptr [ebp-34h],0 7 int arr[] = { [0] = 1, [1] = 2, [2] = 3, [15] = 10 };//按照元素赋值 8 00D51401 mov dword ptr [ebp-30h],0 9 00D51408 mov dword ptr [ebp-2Ch],0 10 00D5140F mov dword ptr [ebp-28h],0 11 00D51416 mov dword ptr [ebp-24h],0 12 00D5141D mov dword ptr [ebp-20h],0 13 00D51424 mov dword ptr [ebp-1Ch],0 14 00D5142B mov dword ptr [ebp-18h],0 15 00D51432 mov dword ptr [ebp-14h],0 16 00D51439 mov dword ptr [ebp-10h],0 17 00D51440 mov dword ptr [ebp-0Ch],0 18 00D51447 mov dword ptr [ebp-8],0Ah
C89支持的写法:
1 int ar[15] = { 1, 2, 3, 4, 5, 6, 7, 8 }; 2 000F3D3E mov dword ptr [ar],1 3 000F3D48 mov dword ptr [ebp-84h],2 4 000F3D52 mov dword ptr [ebp-80h],3 5 000F3D59 mov dword ptr [ebp-7Ch],4 6 000F3D60 mov dword ptr [ebp-78h],5 7 int ar[15] = { 1, 2, 3, 4, 5, 6, 7, 8 }; 8 000F3D67 mov dword ptr [ebp-74h],6 9 000F3D6E mov dword ptr [ebp-70h],7 10 000F3D75 mov dword ptr [ebp-6Ch],8 11 000F3D7C xor eax,eax 12 000F3D7E mov dword ptr [ebp-68h],eax 13 000F3D81 mov dword ptr [ebp-64h],eax 14 000F3D84 mov dword ptr [ebp-60h],eax 15 000F3D87 mov dword ptr [ebp-5Ch],eax 16 000F3D8A mov dword ptr [ebp-58h],eax 17 000F3D8D mov dword ptr [ebp-54h],eax 18 000F3D90 mov dword ptr [ebp-50h],eax
因此这两者上只是语法上的不同,却没有本质上什么差别。
by:ECN14
C99语法之按元素下标赋值
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。