嗨已经做了这个功能,这是为了复制一个我无法通过的错误.它看起来像这样:
void enumerate(double *c, int size){
while(c < &c[size]){
printf("%lf\n", *c);
c++;
}
Run Code Online (Sandbox Code Playgroud)
}
我在那里添加了一些printf,它给了我:
Adressof c: 0x100100080, Adressof c + size: 0x1001000a8
Run Code Online (Sandbox Code Playgroud)
然后我还为循环的每次迭代打印c的地址,它达到0x1001000a8但是继续超过这一点,即使条件应该是假的,据我所知,直到我得到段错误.如果有人能发现问题,请告诉我,我一直在盯着这一段时间.
谢谢.
小智 5
您正在使用c循环条件两侧的当前值,并且c每次迭代都会增加. c永远不会达到自己的地址加上任何东西.
c[size]在您进入循环之前保存地址,您最终会到达它.
void enumerate(double *c, int size) {
double *addr = &c[size];
while(c < addr) {
printf("%lf\n", *c);
c++;
}
}
Run Code Online (Sandbox Code Playgroud)