博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C99语法之按元素下标赋值
阅读量:5245 次
发布时间:2019-06-14

本文共 2262 字,大约阅读时间需要 7 分钟。

  C语言C99标准中出现了一些比较奇葩的语法,比如说使用元素下标的方式了对数组进行初始化这种操作 Demo如下:

1 #include
2 #include
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

 

转载于:https://www.cnblogs.com/ECN14/p/4153924.html

你可能感兴趣的文章
YUV 格式的视频呈现
查看>>
Android弹出框的学习
查看>>
现代程序设计 作业1
查看>>
在android开发中添加外挂字体
查看>>
Zerver是一个C#开发的Nginx+PHP+Mysql+memcached+redis绿色集成开发环境
查看>>
多线程实现资源共享的问题学习与总结
查看>>
Learning-Python【26】:反射及内置方法
查看>>
torch教程[1]用numpy实现三层全连接神经网络
查看>>
java实现哈弗曼树
查看>>
转:Web 测试的创作与调试技术
查看>>
python学习笔记3-列表
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
线程androidAndroid ConditionVariable的用法
查看>>
stap-prep 需要安装那些内核符号
查看>>
2016寒假自学笔记
查看>>
转载:ASP.NET Core 在 JSON 文件中配置依赖注入
查看>>
socket初识
查看>>
磁盘测试工具
查看>>
代码变量、函数命名神奇网站
查看>>