我在调用函数dynamic_arr
时遇到错误 - 不知怎的,我放弃了所有的数组而且只是松散了
返回的第一个元素。
在我的代码中,main
调用一个动态需要创建数组的函数
并且在用户将插入数组的元素之后,所有数组都需要传递给
函数funcdosomthing
。
但目前,函数funcdosomthing
只获取第一个元素,而不是所有数组。
只是为了明确其他一切正常 - 当我不使用函数dynamic_arr
时
设置数组manualy int a[] = {1, 0, 2};
一切正常,函数funcdosomthing
获取包含3个元素的所有数组。
这是我的代码:
int *dynamic_arr(int n)
{
int i, *a;
a = (int*)calloc(n, sizeof(int));
for(i=0;i<n;i++) scanf("%d",a+i);
return a;
}
int mainprograma()
{
int n,*a,i;
scanf("%d",&n);
a=dynamic_arr(n);
funcdosomthing(a, sizeof a / sizeof a[0]);
...
答案 0 :(得分:8)
您正在尝试从指向动态数组的指针计算数组的大小。
sizeof a / sizeof a[0]
在C中,如果只有指向数组的指针,则无法找到数组的长度。如果您有数组,但是您没有数组,那么您使用的代码是合适的,您有一个指针。
所以,如果你已经宣布a
这样
int a[3];
或者
int a[] = {0, 1, 2};
然后a
将是数组而不是指针,上面的sizeof
代码将适用。
幸运的是,您知道动态数组有多大,因为您刚创建它。它有n
个元素。所以你必须这样写funcdosomthing
这样的电话:
funcdosomthing(a, n);
答案 1 :(得分:0)
为什么当你已经知道尺寸时,你试图找到尺寸?!
您应该使用n
而不是像sizeof a / sizeof a[0]
那样计算大小。更重要的是,如果sizeof(a)
是一个数组,a
将给出您的预期结果。在这种情况下,它是pointer-to-memory-which-can-store-n-integers
。