二维数组也是指针
看到二维数组的第一反应就是画表格。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> int main() { int a[3][2] = {{1,2},{3,4},{5,6}}, *p=a[0]; printf("size of a is %d\n", sizeof(a)); printf("%d\n", *(p+4)); printf("a[0]=%d\n", a[0]); printf("a[0]=%d\n", a[1]); printf("a[0]=%d\n", a[2]); return 0; } |
a[][] 或者 **a 才是保存的数值,* 和 [] 的组合 *a[] 也行。 单个 [] 或者 * 如 *a 和 a[] 还是指针。
那么 a[0]、a[1] 表示什么意思呢? 表示的是第0行和第1行的首地址。
而 p 还是访客,对p来说根本意识不到什么二维数组。访客 p 只知道自己所在的位置是个 int 类型的整数。
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> int main() { int a[3][2] = {{1,2},{3,4},{5,6}}, *p=a[0]; printf("a[1][2]=%d\n", a[1][2]); printf("a[1][2]=%d\n", *(a[1]+2)); printf("a[1][2]=%d\n", *(*(a+1)+2)); return 0; } |
你会进行 [] 和 * 的相互转换了吗?
2010年春第27题
27.已知有声明"int a[4][4]={{1,2,3,4},{5,6,7,8),{9,10,11,12},{13,14,15,16)};”,若需要引用值为12的数组元素,则下列选项中错误的是( 27 ) 。
A.*(a+2)+3 B.*(*(a+2)+3) C.*(a[2]+3) D. a[2][3]
2011年春第23题
23 已知有声明”int x[2][3]={0},*p=x[0];”,以下表达式中有语法错误的是__(23)____ ·
A.x[0]=1 B.p[0]=1 C.*p=1 D.x[0][0]=1