首页 > 解决方案 > 在这种处理指针和地址的场景中,我将如何继续 1 到 360 的“for 循环”?

问题描述

#include <iostream>
#include <cstdlib>

using namespace std;
int main() {

    int start = 0;
    for (int* i = &start; i <= (&start + 360); i++) {
        *i = 20;
        cout << "address: " << i << "   contains: " << *i << "\n";
    }
    return 0;
}

每当我删除该*i = 20行时,它只打印cout << "address: " << i << " contains: " << *i << "\n";一次。如有必要,有人可能会在“初学者友好”摘要中清除地址和指针。问题是什么?

标签: c++pointersfor-loopiostreammemory-address

解决方案


int* i = &start

这是有效的。 您正在创建一个指向真正存在的数据的指针。

i++
*i = 20;

这是无效的。它被称为“未定义的行为”。 你现在不知道i点在哪里。

C++ 不会阻止你这样做。它不会阻止你做一些没有意义的事情。您有责任确保指针指向您可以解释的数据。


推荐阅读