我有一个简单的问题.. 我有一个C程序.. 我有一个很长的数组,我想将一个指向这个数组的指针传递给两个函数。 以这种方式传递数组是否正确?
long[] myArray
void myFunction1(long *myArray[]){
*myArray[0] = 1;
}
void myFunction2(long *myArray[]){
*myArray[1] = 2;
}
这是正确的吗?
答案 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;
的指针。
快捷方式会产生较短的符号,通常被认为是更自然的符号,所以它更受欢迎。