gpt4 book ai didi

c - SubArray,将地址传递给函数

转载 作者:太空狗 更新时间:2023-10-29 15:26:53 28 4
gpt4 key购买 nike

我有一个关于将数组第一个元素的地址传递给(递归)函数的问题:

selectionSort( &b[1], size-1);

据我所知,本地址被传递给函数时,函数参数必须是一个指针。 selectionSort 方法获取 int b[] 作为参数。不是指针。

但是代码运行没有任何问题。此代码还生成子数组。当我们传递第一个元素时,它是否成为子数组的第零个元素?

void selectionSort(int b[], int size)
{
int temp,i;

if (size>=1)
{
for (i = 0; i < size; i++)
{
if (b[i]<b[0])
{
temp=b[0];
b[0]=b[i];
b[i]=temp;
}
}
selectionSort( &b[1], size-1 );
}
}

最佳答案

每当你有这样的功能时:

void f(int b[]);

这是一样的

void f(int *b);

函数参数的[]语法只是一种特殊的语法,让读者知道你打算像数组一样使用参数,但它实际上只是一个指针。您不能将实际数组传递给函数。指针和数组在 C 中的工作方式非常相似,因此在大多数情况下,您可以像使用数组一样使用指针(但要小心——有一些重要的异常(exception))。

例如,当您像这样访问数组的元素时:

array[index]

这是一样的

*(array+index)

array 是一个真正的数组还是一个指针并不重要。

所以&b[1]&*(b+1)是一样的,也就是和b+1一样。

如果我们要编写代码,以便我们将 b 参数视为一个指针,它看起来像这样:

void selectionSort(int *b, int size){
.
.
.

selectionSort( b+1, size-1 );

.
.
.
}

现在,您可以看到 selectionSort 被传递了一个指向 int 的指针,它使用指向下一个 int 的指针调用自身。

关于c - SubArray,将地址传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17065605/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com