C语言数组分析
32 pstu-> 3745080} (gdb) p *(a+1)+1 $6 = (int *) 0xbffff32c (gdb) p *(*(a+1)+1) $7 = 8736756 (gdb) p *a $8 = {15, 14, 13, 12, 11} (gdb) p **a $9 = 15 (gdb) p **(a+1) $10 = 32768 (gdb) p a[1] $11 = {32768, 8736756, 8729060, -1073744844, -1073745080} (gdb) p *a[1] $12 = 32768 (gdb) p a[1]+1 $13 = (int *) 0xbffff32c (gdb) p *(a[1]+1) $14 = 8736756 根据$2 = (int (*)[5][5]) 0xbffff314中的[5][5]可知&a的大小是5*5的空间,刚好是一个数组的大小,说明&a表示整个数组的起始地址。(gdb) p &a+1 $3 = (int (*)[5][5]) 0xbffff378 中的[5][5]可知&a+1也是一个数组的起始地址,这也说明了&a是整个数组的初始地址。 (gdb) p a+1,$4 = (int (*)[5]) 0xbffff328中的[5]说明a+1是元素a[1](数组5个元素)的起始地址,而不是某一个数值(二维元素)的起始地址。 (gdb) p *a,$8 = {15, 14, 13, 12, 11},(gdb) p **a,$9 = 15,$8,$9说明a表示的是元素a[0](一个小数组)的起始地址,而不是某一个值的起始地址。*a是一个值(二维元素)的起始地址。 (gdb) p a[1]+1 $13 = (int *) 0xbffff32c 说明a[1]+1是一个值的地址,而不是一个数组的起始地址,因此a[i]+j是一个值(二维元素)的地址。 (gdb) p *(a+1)+1 $6 = (int *) 0xbffff32c (gdb) p *(*(a+1)+1) $7 = 8736756,根据调试结果可知*(a+1)+1是一个值的地址。因此*(a+i)+j是一个值(二维元素)的地址。同时可知*(*(a+i)+j)是一个值(二维元素)。a[i][j]也是一个值。 综合上面的分析可知数组名A在作为右值时是数组首个元素(可能是一个值也可能是一个数组)的起始地址,而&A表示整个数组的起始地址。二维数组具体问题建议多去调试,根据调试分析其中的意义。多调试,多观察,多理解。
C语言数组分 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)
