首页 > 解决方案 > 我可以在 for 循环中使用指针的位置/地址作为终止条件吗?

问题描述

所以我知道我可以使用指针的取消引用值作为 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

我不确定我是否误解了指针或者是我的代码中的问题

标签: cfor-looppointersdynamic-memory-allocationcalloc

解决方案


这个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 循环中递增。


推荐阅读