将指针传递给方法时,使用指针更改数组

时间:2015-07-15 06:07:31

标签: c arrays pointers

假设我正在编写一个排序数组方法。当时我不知道指针,我通常将数组定义为全局,以便它自动更改。 现在我尝试使用它,但它失败了,基本上它最终以

int a[5];
sort(&a);     // Calling sort
...
// My method
void sort(int *a[]) {
    int key = *a[1]; // I've got a bug right here
    ...
}

我仍然不熟悉使用指针。而且我也不能使用参考。请建议我一些方法来做到这一点。 非常感谢你。

3 个答案:

答案 0 :(得分:4)

将您的功能更改为此:: void sort(int *a)或此:: void sort(int a[])

当你从主电话拨打sort时,你不需要拨打sort(&a)a本身就是一个数组指针,调用sort(a)就可以了!

答案 1 :(得分:3)

您传递和使用数组都不正确。数组名称将转换为指向其第一个元素的指针。所以传递名称就足以修改它,而不是指向数组的指针(你也可以将指针传递给数组 - 但必须在函数中相应地使用,通常不需要修改数组的元素)。

称之为:

sort(a);

并使用它:

void sort(int a[]) {
    int key = a[1]; 
    ...
}

sort()中,您可以使用常用的数组表示法。

有一点需要注意的是,您无法使用sort()运算符在sizeof中获取数组的大小,因为sort()中的所有大小信息都会丢失,而您所拥有的只是一个指针。因此,您必须将数组大小作为附加参数传递。

答案 2 :(得分:2)

使用带有索引的方括号表示指针(简单地说,只给你变量而不是地址),所以你不应该在那里有星号。以下是等效的(但仅限0!):

*a
a[0]

如果你实际上试图在 key 中使用第二个元素(索引1)的值,那么你应该使用:

int key = a[1];

此外,由于 a 是一个地址,& a 对你没用,你应该只用 a