我被下面的 while 循环困住了。
whille(*rtn)
只要第一个值为零(请参见下面的示例 0),就被视为 false,因此程序不会进入 while 循环。如果我将第一个值更改为非零(示例 1),程序将进入 while 循环。如果我更改赋值,使第五个元素为零(示例 2),则 while 循环将在第五个元素处停止。 for 循环按预期工作。
size_t sz = 100 ;
int *rtn = malloc(sz*sizeof(int));
int cnt ;
for(cnt = 0 ; cnt < sz ; cnt++){
EXAMPLE 0 rtn[cnt] = cnt*2 ; // First value of array is 0
EXAMPLE 1 rtn[cnt] = cnt*2 + 5 ; // first value of array is non zero
EXAMPLE 2 rtn[cnt] = 5 - cnt ; // fifth value will be 0
}
cnt=0 ;
printf("\n---WHILE LOOP---\n") ;
while(*rtn){
printf("%3d - %4d\n",cnt, *rtn) ;
cnt++ ;
rtn++ ;
}
printf("\n---FOR LOOP---\n") ;
for(cnt = 0 ; cnt < 10 ; cnt ++){
printf("%3d - %4d\n", cnt, rtn[cnt]) ;
}
我认为 while 循环正在测试 NULL 指针而不是 0,这显然可以是一个有效值!? 另外,如果我将 while 循环更改为
while(rtn){
...
}
它只会遍历完整的内存(?)并以错误结束。所以本质上 while 循环不是迭代 int 数组的有效工具?!
不清楚您在问题中问什么,但对于您提到的任一任务使用
while
循环或 for
循环没有任何问题。下面是使用任一元素迭代每个元素的示例。还有使用任一元素进行迭代直到找到“假”元素(如果没有“假”元素则可能超出范围)的示例。还有一个 while
循环的示例,它使用问题中的语法完成相同的事情
#include <stdio.h>
#include <stdlib.h>
int main() {
int sz = 5; // I made this smaller for my example
int* rtn = malloc(sz * sizeof(int));
int cnt;
// Populate some random data
rtn[0] = 3;
rtn[1] = 2;
rtn[2] = 0;
rtn[3] = 1;
rtn[4] = 4;
// If your goal is to iterate over every element this works
printf("For every element\n");
for (cnt = 0; cnt < sz; cnt++) {
printf("%d\n", rtn[cnt]);
}
// If your goal is to iterate over every element this works too
printf("While every element\n");
cnt = 0;
while (cnt < sz) {
printf("%d\n", rtn[cnt]);
cnt++;
}
// If your goal is to iterate until you find a "false" element this does
// that BUT it will go out of bounds if there is no "false" element
printf("For until \"false\" element\n");
for (cnt = 0; rtn[cnt]; cnt++) {
printf("%d\n", rtn[cnt]);
}
// If your goal is to iterate until you find a "false" element this does
// that too. It also will go out of bounds if there is no "false" element
printf("While until \"false\" element\n");
cnt = 0;
while (rtn[cnt]) {
printf("%d\n", rtn[cnt]);
cnt++;
}
// Yet another way to do the exact same as the previous while loop
printf("Another while until \"false\" element\n");
while (*rtn) {
printf("%d\n", *rtn);
rtn++;
}
return 0;
}