C数组和指向数组的指针

时间:2013-05-08 17:05:38

标签: c arrays pointers

我有一个简单的问题.. 我有一个C程序.. 我有一个很长的数组,我想将一个指向这个数组的指针传递给两个函数。 以这种方式传递数组是否正确?

long[] myArray


void myFunction1(long *myArray[]){

*myArray[0] = 1;

}

void myFunction2(long *myArray[]){

*myArray[1] = 2;

}

这是正确的吗?

3 个答案:

答案 0 :(得分:2)

不,这是不正确的,因为当你声明一个这样的变量 -

long *myArray[]

它表示一个可以容纳长指针的数组,而不是长值。我猜测(来自你的函数体)这不是你打算做的。

将您的函数参数更改为long myArray[],并指定不带星号的值。

喜欢这个 -

void myFunction1(long myArray[]){
    myArray[0] = 1;
}

void myFunction2(long myArray[]) {
    myArray[1] = 2;
}

或者,如果你想使用指针,那么 -

void myFunction1(long *myArray){
    myArray[0] = 1;
}

void myFunction2(long *myArray) {
    myArray[1] = 2;
}

在这两种情况下,请记住确保阵列的大小至少为2。

答案 1 :(得分:2)

好吧,让我们考虑一下:

long myArray[3]; // This is an array of 3 long's

long *myArray[3]; // Is this? No, this is an array of 3 pointers to longs.

这几乎告诉你答案。

void myFunction1(long *myArray[]){

这不是将数组传递给函数的方式(长或其他)。你只需要一个数组:

void myFunction1(long myArray[]){
    myArray[0] = 1;

或者你可以拿一个指针:

void myFunction1(long *myArray){
    myArray[0] = 1;

这是因为数组衰减为指针。

答案 2 :(得分:1)

当你宣布void myFunction1(long *myArray[])时,我怀疑你犯了两个错误。

一个是我认为你打算将它作为数组的指针。但是,括号[]与标识符myArray绑定得比星号*更紧密。所以参数是long *(myArray[]),它是指向long的指针数组,但我认为你想要一个指向long数组的指针,它将是long (*myArray)[]。< / p>

您实际上可以使用此参数声明函数,向其传递指向数组的指针,与myFunction1(&myArray)一样,并使用函数内部的指针,与(*myArray)[0] = 1;一样。

然而,C给了我们一个捷径,而不是使用它是第二个错误。如果您将参数声明为long myArray[],那么它看起来像一个数组,但它实际上已转换为long *myArray,这是指向long的指针。然后您可以将数组作为myFunction1(myArray)传递。虽然myArray是一个数组,但C将其转换为指向第一个元素的指针。因此,参数myArray将匹配参数long myArray[]。然后,在函数内部,您可以使用带有myArray[0] = 1;的指针。

快捷方式会产生较短的符号,通常被认为是更自然的符号,所以它更受欢迎。