微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > C语言数组分析

C语言数组分析

时间:12-01 来源:互联网 点击:

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表示整个数组的起始地址。二维数组具体问题建议多去调试,根据调试分析其中的意义。多调试,多观察,多理解。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top