c++ - 在这种处理指针和地址的场景中,我将如何继续 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";
一次。如有必要,有人可能会在“初学者友好”摘要中清除地址和指针。问题是什么?
解决方案
int* i = &start
这是有效的。 您正在创建一个指向真正存在的数据的指针。
i++
*i = 20;
这是无效的。它被称为“未定义的行为”。 你现在不知道i
点在哪里。
C++ 不会阻止你这样做。它不会阻止你做一些没有意义的事情。您有责任确保指针指向您可以解释的数据。
推荐阅读
- python - 检入从最后一个字符到第一个字符的字符串
- haskell - 如何防止输入被冲入输出?
- javascript - Mongoose 填充并按填充字段搜索
- firebase - 多个数据库的 Firebase 身份验证规则
- pine-script - 未触发 Pinescript 警报
- sql-server - 用于 Windows 身份验证远程的数据原子 cson 配置
- google-apps-script - 当列不为空时自动包含/删除复选框
- java - 如何使用 for 循环打印对象的名称
- node.js - Microsoft bot 未从 Firebase 云功能做出响应
- google-sheets - 加入 importrange 和 Query