2017-10-28 212 views
1
int* dividers_of(int x, int ammount){ 
int i,j = 1; 
int* dividers = (int*)calloc(ammount,sizeof(int)); /* calloc initializes int array to 0!*/ 

for(i=0;i<ammount;i++){ 

    while((x%j) != 0){ 
     j++; 
    } 

*(dividers+i) = j; 

/*DOESNT WORK (int* dividers stays on 0-0-0) 
*dividers = j; 
dividers++; */ 

j++; 
} 
return dividers; 
} 

我试图找出什么地方错了还是不行,我的阵列中分配int j*dividers,然后使dividers点到下一个int的代码。结果应该是指向包含int xint分隔符的数组的指针。指针递增

不幸的是,如果我不喜欢这样的结果是以下数组:

dividers[] = {0,0,0}; 

这意味着一切都没有改变,因为calloc填补这样的阵列。

请告诉我在

*dividers = j; 
dividers++; 

发生了什么?

+0

它的拼写'amount',而不是'ammount'。 – melpomene

+0

不要[调用'calloc'的结果](https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc)。 – melpomene

+0

1/**我们不能重现这个问题**这是新手常见的问题,所以请阅读本网站帮助中心的常见问题解答,以便学习如何编写问题以便让其他人重现(并因此实验)这个问题。我完成了直接链接到该部分。如果我们要谈论礼貌,那么在您发布之前,您应该阅读整个部分。忽略这样的社区标准是无礼的。 – Sebivor

回答

0

如果在循环增量dividers

dividers++; 

那么它不会有在结束其原始值:

return dividers; 

随着增量,你的函数返回一个指针过去数组的结尾,而不是指向数组的开始的指针。

解决这个问题的最简单的方法是将原来的指针保存在另外一个变量在开始:

int *dividers = ...; 
int *dividers_start = dividers; 

/* ... modify dividers here ... */ 

return dividers_start; 

但你也可以使用指针运算撤消增量:

return dividers - ammount; 
+0

数组的值会发生什么? – Aditya

+0

@ADITYA什么数组? – melpomene