狞嗅 发表于 2025-6-9 20:53:43

C语言 理解二维数组

数组

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

定义

[*]a表示数组第一个元素的地址,即&a, 类型是int(表示指针,int表示指针指向的数据类型)
[*]&a表示取整个数组的地址,类型是int (*),表示一个指向10个int类型的数组指针
相同点:a和&a在数值上是相同的
不同点:它们实现运算的结果是不同的
二维数组

今天碰到这样一道题,很疑惑。
Q2:int a,以下哪个是取a的元素?
A. *(*(a+1)+2)
B. *(a+1+2)
C. (&a+1)
D. *(a+1)
解析:
首先,看A选项,a是指向一维数组的指针,是行指针,在数值上等价于&a的地址,再+1应当是偏移一行,相当于&a,解引用是a,a是列指针,a+2再解引用得到的就是a;
再看B,显然不对
C,&a得到的是行指针,+1就是指向&a,数组下标2指的是再偏移2,此时变成&a。C的正确写法应该是((&a+1)+2)
D,很明显是a

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: C语言 理解二维数组