现在的位置: 首页 > 14 二级C语言 > 正文

理解概念、解析真题:二维数组

2011年09月27日 14 二级C语言 ⁄ 共 791字 ⁄ 字号 暂无评论

二维数组也是指针

看到二维数组的第一反应就是画表格。

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

抱歉!评论已关闭.