关于数组中C的指针用法和正常值

时间:2016-07-19 09:56:10

标签: c arrays pointers

void max_min(int *a, int size, int *max, int *min){
    insertion_sort(a, size);
    *min = a[0];
    *max = a[size-1];
}

这个C函数运行正常。当使用参数时,我感到困惑,

  • 您需要使用 * min 将传入参数用作值 一些地址。
  • 但是当您将 * a 视为数组时,您并不需要 在该变量之前添加星号。

为什么?

2 个答案:

答案 0 :(得分:4)

您可以将a[0]写为*aa[size-1]等同于*(a+(size-1))

当作为参数传递给函数时,指针和数组是等价的(但仅在这种情况下)。此下标运算符可用于指针,如 -

a[5]  <==> *(a+5)

事实上a[5]相当于5[a],由rubikonx9 建议)

您可以阅读下标运算符here

答案 1 :(得分:0)

回答你的混淆

  • *min表示指针指向的变量。如果您想更改它的值,那么您需要使用*min(这与正常分配相同)。如果您使用min = a[0],则只需将指针min指向另一个地址(地址的值为a [0])。因此min指向的原始变量不会被更改。这可能很危险。

  • 数组的名称是指向第一个元素的指针。所以喜欢正常点。

更重要的是,地址&a[0]和地址a内的值相等。地址&[0]中的值为a[0],地址a中的值为*a。因此,arr[0]相当于*arr

所以a表示数组,*a表示数组的值。

希望能帮到你。