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