gpt4 book ai didi

c - 指针递增

转载 作者:太空宇宙 更新时间:2023-11-04 04:20:51 26 4
gpt4 key购买 nike

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

?

最佳答案

如果在循环中递增 dividers:

    dividers++;

那么最后它就没有原来的值了:

return dividers;

随着递增,您的函数返回一个指向数组末尾的指针,而不是指向数组开头的指针。

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

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

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

return dividers_start;

但是你也可以使用指针运算来撤销增量:

return dividers - ammount;

关于c - 指针递增,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46988271/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com