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

时间: 2024-10-06 05:27:38

C99语法之按元素下标赋值的相关文章

C语言数组元素下标为何从0开始

很多同学可能在学习数组时会有这个疑问,下标为什么不从1开始呢?从1开始不是更符合大家的日常习惯吗?生活中我们通常说第1个,而不是第0个.的确,有些计算机语言如早期的Pascal语言,数组元素的下标是从1开始的.难道是C语言故意要与众不同?要弄清楚这个问题,得先看一下计算机底层是怎样处理数组元素的.我们先编写了一个小程序,然后在visual studio中对其进行了反汇编.源程序和反汇编后的部分代码如下: 源程序: int arr[5];  //一个全局数组 int main() { int i;

c语言:对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出。

对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输出. 解:程序: #include<stdio.h> int main() { int i, a[10]; for (i = 0; i <= 9; i++) { a[i] = i; } for (i = 9; i >= 0; i--) { printf("%3d", a[i]); } printf("\n"); return 0; } 结果: 9  8  7  6 

C99语法之新增类型_Bool

在C99语法中新增加了_Bool 的布尔类型语法,例子如下: 1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main(int argc, char **argv) 5 { 6 _Bool b; 7 b = 0; 8 printf("%d\n", b); 9 b = 1; 10 printf("%d\n", b); 11 b = 3; 12 printf("%d\n", b

XML 树结构,语法规则,元素,属性,验证及其解析

XML 文档形成了一种树结构,它从"根部"开始,然后扩展到"枝叶". 一个 XML 文档实例 XML 文档使用简单的具有自我描述性的语法: <?xml version="1.0" encoding="UTF-8"?> <note> <to>Tove</to> <from>Jani</from> <heading>Reminder</hea

11月8日上午Jquery的基础语法、选取元素、操作元素、加事件、挂事件及移除事件

jquery基础知识 1.jquery文件的引入,所有的js代码要写在下面那段代码下面. <script src="../jquery-1.11.2.min.js"></script><!--引入的jquery一定是在最上面的,也要在其它引入的jquery文件上面--> 2.写jquery代码的位置 和js一样,jquery代码也是写在<script>开始和结束标签之间. <script type="text/javasc

deque双端队列容器(对象创建,数组、迭代器方式访问,元素的赋值、插入、删除等)

deque与vector非常相似,不仅可以在尾部插入和删除元素,还可以在头部插入和删除.不过当考虑到容器元素的内存分配策略和操作性能时,deque相对vector较为有优势. 头文件 #include<deque> 创建deque对象 1)deque();//创建一个没有任何元素的deque对象. deque<int> d 2)deque(size_typen);//创建一个具有n个元素的deque对象,每个元素采用它的类型下的默认值. deque<int> d(10)

【Jsoup的学习礼记】使用选择器语法来查找元素

问题 你想使用类似于CSS或jQuery的语法来查找和操作元素. 方法 可以使用Element.select(String selector) 和 Elements.select(String selector) 方法实现: File input = new File("/tmp/input.html"); Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/"); Ele

jsoup使用选择器语法来查找元素

问题 你想使用类似于CSS或jQuery的语法来查找和操作元素. 方法 可以使用Element.select(String selector) 和 Elements.select(String selector) 方法实现: File input = new File("/tmp/input.html"); Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/"); Ele

使用选择器语法来查找元素

问题 你想使用类似于CSS或jQuery的语法来查找和操作元素. 方法 可以使用Element.select(String selector) 和 Elements.select(String selector) 方法实现: File input = new File("/tmp/input.html"); Document doc = Jsoup.parse(input, "UTF-8", "http://example.com/"); Ele