数组
在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]
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |