c语言中二维数组的一些试验结果

来源:互联网 发布:智能聊天女友软件 编辑:程序博客网 时间:2024/05/22 03:20

二维数组a[m][n]中:
第一维------^   ^-------第二维

虽然&a=a=&a[0]=*a=a[0]=&a[0][0]他们都相等,但是他们分别表示的意义却不同,如下所述:
注:这里的&a[0][0]表示二维数组第一个元素的地址,&符号为地址析取符号,即取得其后变量或常量的地址。关键注意下面叙述中,步长的区别。本结果是在winxp home edition,x86架构,vc 6.0下试验的结果,希望各位朋友补充其他方面的内容。因为我被指针、数组、引用、地址等概念搞混了,所以就试验了二维数组的情况,其他情况请各位有空补充。

  1. &a代表整个数组的地址;所以&a+1这里的步长1代表整个数组的size,即size=sizeof(a)=数组元素个数×每个元素的数据类型长度(即sizeof(元素类型),例如整型就是4bytes,下同)。
    可以推断:&a+1=&a[0][0]+m×n×sizeof(元素类型),&a+2=&a[0][0]+2×m×n×sizeof(元素类型)...
  2. a代表“第一维”的地址;所以a+1这里的步长1代表第一维的size,即size=第二维的维数n×每个元素的数据类型长度(例如整型就是4bytes)。
    可以推断:a+1=&a[0][0]+n×sizeof(元素类型),a+2=&a[0][0]+2×n×sizeof(元素类型)...
  3. &a[0]代表“第一维”的地址;所以&a[0]+1这里的步长1代表第一维的size,即size=第二维的维数n×每个元素的数据类型长度(例如整型就是4bytes)。
    可以推断:&a[0]+1=&a[0][0]+n×sizeof(元素类型),&a[0]+2=&a[0][0]+2×n×sizeof(元素类型)...
  4. *a代表第一个元素的地址;所以*a+1这里的步长1代表一个数组元素的size,即size=每个元素的数据类型长度(例如整型就是4bytes)。
    可以推断:*a+1=&a[0][0]+sizeof(元素类型),*a+2=&a[0][0]+2×sizeof(元素类型)...
  5. a[0]代表第一个元素的地址;所以a[0]+1这里的步长1代表一个数组元素的size,即size=每个元素的数据类型长度(例如整型就是4bytes)。
    可以推断:a[0]+1=&a[0][0]+sizeof(元素类型),a[0]+2=&a[0][0]+2×sizeof(元素类型)...
  6. &a[0][0]代表第一个元素的地址;所以&a[0][0]+1这里的步长1代表一个数组元素的size,即size=每个元素的数据类型长度(例如整型就是4bytes)。
    可以推断:&a[0][0]+1=&a[0][0]+sizeof(元素类型),&a[0][0]+2=&a[0][0]+2×sizeof(元素类型)...

至此可以看出:在二维数组中,*a、a[0]、&a[0][0]表示的意义完全一样(第一个元素的地址,步进为元素的size),而a、&a[0]表示的意义完全一样(第一维的首地址,步进为第二维的维数n×sizeof(元素类型)),&a表示整个数组的地址。

原创粉丝点击