数组初始化问题:int a[3]={0}和int a[3]={1}的区别
2011-06-26 21:42
381 查看
数组定义同时初始化是个常见的问题,比如,int a[3]={0},其中a[0],a[1],a[2]这三个值都为0。
如果这样定义,同时赋值:int a[3]={1},是不是意味着a[0]=1,a[1]=1,a[2]=1呢?这是一个很容易出错的问题,答案肯定不是这样,笔者在多个编译器上试过,结果只有a[0]=1,而a[1]=0,a[2]=0。
如果要追究原因,只能去问搞编译器的人。语言有时候很难说为什么这样,或许只能方便而已。这是vc6.0下的汇编:
……
4: int a[3]={0};
00401028 mov dword ptr [ebp-0Ch],0 ;a[0]=0
0040102F xor eax,eax ;寄存器eax清零,eax的值为0
00401031 mov dword ptr [ebp-8],eax ;把eax的值赋给a[1],所以a[1]=0
00401034 mov dword ptr [ebp-4],eax;把eax的值赋给a[2],所以a[1]=0
5: int b[3]={1};
00401037 mov dword ptr [ebp-18h],1;b[0]=1
0040103E xor ecx,ecx;寄存器ecx清零, ecx的值为0
00401040 mov dword ptr [ebp-14h],ecx;把ecx的值赋给b[1],所以b[1]=0
00401043 mov dword ptr [ebp-10h],ecx;把ecx的值赋给b[2],所以b[1]=0
如果这样定义,同时赋值:int a[3]={1},是不是意味着a[0]=1,a[1]=1,a[2]=1呢?这是一个很容易出错的问题,答案肯定不是这样,笔者在多个编译器上试过,结果只有a[0]=1,而a[1]=0,a[2]=0。
如果要追究原因,只能去问搞编译器的人。语言有时候很难说为什么这样,或许只能方便而已。这是vc6.0下的汇编:
……
4: int a[3]={0};
00401028 mov dword ptr [ebp-0Ch],0 ;a[0]=0
0040102F xor eax,eax ;寄存器eax清零,eax的值为0
00401031 mov dword ptr [ebp-8],eax ;把eax的值赋给a[1],所以a[1]=0
00401034 mov dword ptr [ebp-4],eax;把eax的值赋给a[2],所以a[1]=0
5: int b[3]={1};
00401037 mov dword ptr [ebp-18h],1;b[0]=1
0040103E xor ecx,ecx;寄存器ecx清零, ecx的值为0
00401040 mov dword ptr [ebp-14h],ecx;把ecx的值赋给b[1],所以b[1]=0
00401043 mov dword ptr [ebp-10h],ecx;把ecx的值赋给b[2],所以b[1]=0
相关文章推荐
- 传递数组fun(int a [])和fun(int *a )的区别
- c语言中字符串常见初始化时的问题,以及字符串数组与指针区别的分析
- (2)int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)
- 指针的步长问题,int a[5]。a+1跟&a+1跟(int)a+1的区别
- 编写函数int stat(int a[],int n,int c[][2])。a指向的数组中保存了由n个1位整数组成的数列(n为偶数)。函数从前至后依次将a数组中每两个相邻元素拼成一个不超过2位的
- int a; int* a; int** a; int (*a)[10]; int (*a)(int)区别
- 转载部分代码,窗口点击问题,顺序,初始化数组,简单结构体
- 数组int[],int[,]的区别
- 用“字符”初始化数组与用“字符串”初始化数组的一点区别
- 一维数组的初始化问题
- const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义
- 5-2-1 数组变量-直接初始化数组-length优势-int[] b=a-a让b共同管理数组-复制数组
- const int *a, int const *a,int * const a,区别,指针数组,数组指针,声明与定义
- java基础问题----Integer与int的区别
- C 语言和 OC 数组初始化的区别
- Java 数组 int[] a int[] b ,(假设 a , b 都已经实例化)引发的问题。
- 字符数组中关于strlen的问题(未初始化)
- 字符串初始化指针和初始化数组区别
- 《C++笔记》 Part7 一维数组与二维数组的初始化问题(vector)
- 函数sun(int a [],int n)的返回值是数组a[]的前几个元素之和