指针递增

时间:2017-10-28 09:36:11

标签: c arrays pointers memory-management

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};

1 个答案:

答案 0 :(得分:0)

如果你在循环中增加dividers

    dividers++;

然后它最终没有原始值:

return dividers;

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

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

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

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

return dividers_start;

但您也可以使用指针算法撤消增量:

return dividers - ammount;