11.18

拉链结构

把数组里放数组的地址

在这里会用到下标运算,格式类似二维数组

二维数组内存格式是一块连续的空间

拉链结构中,仅存放的地址是相邻的

二维数组每个小数组元素数量相同

拉链结构中元素数量无限制

只有在定义的时候[ ]才是数组

  1. #include<stdio.h>
  2. int main(){
  3. int a[5][3]={{5,9,7},{6,1,3},{2,4,8},{11,12,13},{14,15,16}};
  4. int g[2]={66,99};
  5. int k[3]={55,77,44};
  6. int *b=&a[0][2];
  7. int *c=&a[2][0];
  8. int (*d)[5][3]=&a; //数组指针
  9. int (*o)[3]=a; //数组指针(这里是int[3],而不失int[5],因为要定义的是一维数组)
  10. int* p[2]={b,c}; //指针数组
  11. int* f[2]={k,g}; //指针数组 (放地址的数组)
  12. int* q[2]={&a[0][2],&a[2][0]} ; //指针数组
  13. /* *o==a[0]
  14. *o[0]==a[0][0]
  15. *o[1]==a[0][1]
  16. *(p+1)==a[1] ~p定义为一个含三个整型元素的数组的地址,其所占内存为12,+1即为下一个数组~
  17. (*(p+1))[0]==a[1][0]==p[1][0] ~不能没有[0]~ */
  18. printf("%d %d,%d\n",p[1],q[1],p[0][1]);
  19. printf("%d %d %d\n",&a[1][0],&a,d);
  20. printf("%d %d %d %d\n",d[0][1],&a[0][1],(*d)[0][1],a[0][1]); //是一个值,但地址不一样????
  21. }