假设我正在编写一个排序数组方法。当时我不知道指针,我通常将数组定义为全局,以便它自动更改。 现在我尝试使用它,但它失败了,基本上它最终以
int a[5];
sort(&a); // Calling sort
...
// My method
void sort(int *a[]) {
int key = *a[1]; // I've got a bug right here
...
}
我仍然不熟悉使用指针。而且我也不能使用参考。请建议我一些方法来做到这一点。 非常感谢你。
答案 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