代码如下:
1 //使用非递归,通过归纳验证总结出规律,枚举处元素个数 2 int64 f_n(int64 m,int64 n) 3 { 4 int64 a[m][n]; 5 int i,j; 6 for(i=0;i<n;i++) 7 { 8 a[0][i]=i+1;//每列第一个元素 9 } 10 for(i=0;i<m;i++) 11 { 12 a[i][0]=i+1;//每行第一个元素 13 } 14 for(i=1;i<m;i++) 15 { 16 for(j=1;j<n;j++) 17 { 18 a[i][j]=a[i][j-1]+a[i-1][j]; 19 } 20 } 21 return a[m-1][n-1]; 22 }
在上面代码的21行设置了断点,使用gdb调试,看数组a在栈中存放
输入p &a[0][0]时出现如下错误:
Cannot perform pointer math on incomplete types, try casting to a known type, or void *.
百思不得其解,后来在stackoverflow上找到了答案,链接如下:http://stackoverflow.com/questions/6007440/why-i-cant-watch-the-expression-a11-after-declare-it-by-ann-in-c
调试时数组长度必须确定,将a[m][n]改为a[100][100]即可
随便说一句,stackoverflow真是个好东西