数组取值
来源:7-10 案例:指针版本的快速排序【Hoare分割法】

wxz123
2021-01-23
int players[10];
for (int i = 0; i < 10; ++i) {
players[i] = i;
printf("%d\n",(&players));
printf("%d\n",(players));
printf("%d\n",(&players)[i]);
printf("%d\n",players[i]);
}
1、老师,&players
和players
都表示数组的首地址,那为啥(&players)[i]
和players[i]
的值不一样呢?
2、另外老师我发现&players
的类型是int(*)[10]
,这是表示&players
是一个指针数组吗?
3、*((&players)[i])
和players[i]
的值也不一样,那&players
中各个元素是指向什么的指针呢?
写回答
3回答
-
类型不一样,地址的加减法的单位就不一样了。所以值不一样的问题也就解决了。012021-01-23
-
bennyhuo
2021-01-23
&array 这个其实还是一个地址,不过毕竟 array 的类型是 int [10],所以就有 int (*(&array))[10],于是 &array 的类型就是 int (*)[10]。
00 -
bennyhuo
2021-01-23
嗯,array虽然在当作地址用的时候,会是数组的首地址,但取元素的值时,也就是array[i]其实相当于 *(array + i)。
00
相似问题