数组取值

来源: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、老师,&playersplayers都表示数组的首地址,那为啥(&players)[i]players[i]的值不一样呢?
2、另外老师我发现&players的类型是int(*)[10],这是表示&players是一个指针数组吗?
3、*((&players)[i])players[i]的值也不一样,那&players中各个元素是指向什么的指针呢?

写回答

3回答

bennyhuo

2021-01-23

类型不一样,地址的加减法的单位就不一样了。所以值不一样的问题也就解决了。
0
1
wxz123
非常感谢!
2021-01-23
共1条回复

bennyhuo

2021-01-23

&array 这个其实还是一个地址,不过毕竟 array 的类型是 int [10],所以就有 int (*(&array))[10],于是 &array 的类型就是 int (*)[10]。

0
0

bennyhuo

2021-01-23

嗯,array虽然在当作地址用的时候,会是数组的首地址,但取元素的值时,也就是array[i]其实相当于 *(array + i)。

0
0

C语言系统化精讲 重塑编程思想 打造坚实的开发基础

如果通向大牛的道路有捷径,那就是先学好C语言

2208 学习 · 853 问题

查看课程