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
然后制作代码{\ n} {1}}指向其数组中的下一个dividers
。结果应该是一个指向数组的指针,该数组包含int
的{{1}}个分隔符。
不幸的是,如果我这样做的结果是以下数组:
int
这意味着自int x
填充数组后没有任何变化。
发生什么事
dividers[] = {0,0,0};
答案 0 :(得分:0)
如果你在循环中增加dividers
:
dividers++;
然后它最终没有原始值:
return dividers;
随着增量,你的函数返回一个超过数组末尾的指针,而不是指向数组开头的指针。
解决此问题的最简单方法是将原始指针保存在开头的另一个变量中:
int *dividers = ...;
int *dividers_start = dividers;
/* ... modify dividers here ... */
return dividers_start;
但您也可以使用指针算法撤消增量:
return dividers - ammount;