C 将数组移交给函数。指针的正确使用?

C 将数组移交给函数。指针的正确使用?,c,pointers,C,Pointers,我有一个与数组/指针相关的问题。 我创建了一个大小为3的int数组myArray。我想用一个函数填充这个数组。 所以我调用这个函数,给她数组的地址&myArray。 函数声明“”的语法正确吗?我将指针交给数组,这样函数就可以逐个填充数组元素。 但不知何故,我的数组没有填充正确的值。 在Java中,我可以给一个方法一个数组,然后返回一个数组。 感谢您的帮助!谢谢 #include <stdio.h> int myArray[3]; void getSmth(int *anArray

我有一个与数组/指针相关的问题。 我创建了一个大小为3的int数组
myArray
。我想用一个函数填充这个数组。 所以我调用这个函数,给她数组的地址
&myArray
。 函数声明“”的语法正确吗?我将指针交给数组,这样函数就可以逐个填充数组元素。 但不知何故,我的数组没有填充正确的值。 在Java中,我可以给一个方法一个数组,然后返回一个数组。 感谢您的帮助!谢谢

#include <stdio.h>

int myArray[3];

void getSmth(int *anArray[]);

int main(void)
{
  getSmth(&myArray);

}

void getSmth(int *anArray[])
{
  for(i=0...)
  {
    *anArray[i] = tmpVal[i];
  }
}
#包括
int-myArray[3];
void getSmth(int*anArray[]);
内部主(空)
{
getSmth(&myArray);
}
void getSmth(整数*数组[])
{
对于(i=0…)
{
*anArray[i]=tmpVal[i];
}
}

您应该使用
int-anArray[]
int*anArray
(实际上是相同的,因为数组衰减到指针)。您还应确保函数通过协议或将其作为参数传递知道数组的大小,因为它不能使用
sizeof

删除一级间接寻址:

#include <stdio.h>

int myArray[3];

void getSmth(int anArray[]);

int main(void)
{
  getSmth(myArray);

}

void getSmth(int anArray[])
{
  for(i=0...)
  {
    anArray[i] = tmpVal[i];
  }
}
#包括
int-myArray[3];
void getSmth(int anArray[]);
内部主(空)
{
getSmth(myArray);
}
void getSmth(内部数组[])
{
对于(i=0…)
{
anArray[i]=tmpVal[i];
}
}

另外,正如其他人所建议的,最好将数组的大小传递到
getSmth()

中。不,语法不正确。您有一个额外的
*
,使参数成为指针数组

一般来说,最好使用:

void getSmth(int *array, size_t length);
从那时起,该函数可以处理来自更多源的数据,并且长度变得可用,这对于在数据上进行迭代非常方便,就像您希望做的那样

你可以这样称呼它:

int main(void)
{
  int a[12], b[53];

  getSmth(a, sizeof a / sizeof a[0]);
  getSmth(b, sizeof b / sizeof b[0]);
}

注意使用
sizeof
来计算(在编译时)元素的数量。这比重复变量定义中的数字要好。

现在,您的函数接受一个
int*anArray[]
参数,它是指向int的指针数组。删除不必要的
*
,函数签名应该如下所示:

void getSmth(int anArray[]); // array of int


请注意,
sizeof
技巧仅适用于实际数组(
int-array[]
),而不适用于已衰减为指针的对象(
int*array
)。这意味着您可以在构建数组后使用sizeof来获取长度,但随后必须将长度作为额外参数传递。
void getSmth(int *anArray);  // pointer to first array element of type int