我可以使用指针的 location/address 作为 for 循环中的终止条件吗?

Can I use location/address of pointer as terminating condition in a for loop?

所以我明白我可以使用指针的取消引用值作为 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循环中递增。