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


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 当作一个数组时,你不需要以在该变量之前添加星号。

为什么?

你可以

a[0]写成*aa[size-1]等同于*(a+(size-1))

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

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

事实上,a[5]等同于5[a](如 rubikonx9 所建议的那样(

您可以在此处阅读有关下标运算符的信息

回答你的困惑

  • *min表示指针指向的变量。如果你想改变它的值,所以你需要使用*min(这与正常分配相同(。如果使用min = a[0],则仅使指针min指向另一个地址(地址的值为 a[0](。因此,min指向的源变量不会更改。这可能很危险。

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

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

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

希望对您有所帮助。

最新更新