所以我明白我可以使用指针的解引用值作为 for 循环中的条件。但是,我一直在尝试使用指针的位置(在它所指向的数组中)作为终止条件。
换句话说,当指针迭代到它指向的数组的(比如第三个)元素时,终止循环。
这是我的代码如下:
int main() {
int *ptr = (int*) calloc(5, sizeof(int));
//returns an int pointer pointing at {0, 0, 0, 0, 0} Correct??
for (int i=0; ptr < ptr+3; ptr++, i++){ //i is for counting
*ptr = i+1; // dereference value of each element into 1
printf("value of %d element of ptr is: %d \n", i, *ptr);
}
return 0;
}
我希望输出是:
value of 0 element of ptr is: 1
value of 1 element of ptr is: 1
value of 2 element of ptr is: 1
但是,我的代码会一直运行并输出,直到达到疯狂的高数 ( value 1939010 of ptr is: 1939011
)时中断。
我不确定是我误解了指针还是我的代码有问题
这个 for 循环
for (int i=0; ptr < ptr+3; ptr++, i++){ //i is for counting
*ptr = i+1; // dereference value of each element into 1
printf("value of %d element of ptr is: %d \n", i, *ptr);
}
不正确,因为它调用了未定义的行为。:) 表达式ptr
显然小于表达式ptr + 3
。
您需要的是以下内容
int i = 0;
for ( int *p = ptr; p < ptr+3; p++ ){ //i is for counting
*p = ++i; // dereference value of each element into 1
printf("value of %d element of p is: %d \n", i - 1, *p);
}
也就是说,您需要引入一个新的指针类型变量,该变量将在 for 循环中递增。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句