Loading

C语言 理解二维数组

数组

在C语言中,数组名表示数组的地址。
数组名是一个常量指针
常量指针:指针的指向不能变,但可以通过指针修改指针所指向区域的内容。
int* const p = &a[0]

Q1:假设有数组a[10],a、&a的区别?

定义

  • a表示数组第一个元素的地址,即&a[0], 类型是int(表示指针,int表示指针指向的数据类型)
  • &a表示取整个数组的地址,类型是int (*)[10],表示一个指向10个int类型的数组指针

相同点:a和&a在数值上是相同的
不同点:它们实现运算的结果是不同的

二维数组

今天碰到这样一道题,很疑惑。

Q2:int a[3][4],以下哪个是取a[1][2]的元素?

A. *(*(a+1)+2)

B. *(a+1+2)

C. (&a[0]+1)[2]

D. *(a[0]+1)

解析:

首先,看A选项,a是指向一维数组的指针,是行指针,在数值上等价于&a[0]的地址,再+1应当是偏移一行,相当于&a[1],解引用是a[1],a[1]是列指针,a[1]+2再解引用得到的就是a[1][2];
再看B,显然不对
C,&a[0]得到的是行指针,+1就是指向&a[1],数组下标2指的是再偏移2,此时变成&a[3]。C的正确写法应该是((&a[0]+1)+2)
D,很明显是a[0][1]

posted @ 2025-06-05 11:05  王仲康  阅读(26)  评论(0)    收藏  举报