我可以在 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)时中断

我不确定是我误解了指针还是我的代码有问题

来自莫斯科的弗拉德

这个 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我可以在C ++中的for循环中使用指针吗?

我可以在Python的for循环中使用变量作为索引吗?

我可以在for循环中添加条件吗?

我可以在vuejs循环中使用slot吗?

我可以不在循环中使用调度组吗?

我可以在for循环中使用bash括号扩展吗?

我可以在for循环中使用with语句吗?

我可以在 foreach 循环中使用 eloquent 模型吗

我可以在 for 循环中使用 if 语句吗

我可以在函数中使用关系或条件作为变量吗?

我们可以限制 for 循环中的 if 条件吗?

我们可以在 range-for 循环中对引用(而不是指针)使用 delete 吗?

我可以在一个循环中使用多个 for 循环吗?

我可以在一个循环中使用2个循环语句吗?

可以在for循环中使用lambda吗?

在我的循环中使用UPDATE吗?

我可以在循环中使用itertools :: PutBack :: put_back吗?

我们可以在PHP的foreach循环中使用IterateAggregate或Iterator吗?

我可以在一个 while 循环中使用 2 个计数器吗?

我可以在一个foreach循环中使用两组变量吗?

我可以在模板参数中使用指针吗?

我可以做一个使用RSI值作为条件的while循环吗?

我可以在 while 循环中调用我的函数吗?

我可以在PL / SQL块中使用REGEXP_LIKE作为IF的条件吗

Powershell-我可以在条件中使用字符串作为对象吗?

我可以在 PHP 中使用 DECLARE 作为 SQL 语句吗

我可以在 WPF 中使用 ViewBox 作为图像的源吗?

我可以在指定路径中使用`man`作为命令吗?

我可以在方法调用中使用null作为参数吗?