gpt4 book ai didi

c++ - 在 C++ 中索引整数指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:15 25 4
gpt4 key购买 nike

我是 C++ 的初学者,我试图通过编写尽可能多的各种小程序 (programmlet) 来了解我遇到的每一个新概念。所以我刚刚编写了以下代码:

#include <iostream>
using namespace std;

int main(){
int inumbers[] = {1 ,2 , 3, 4, 5};
int *p;
int i;

p = inumbers;

for(i = 0; p[i]; i++) cout << p[i] << '\n';

return 0;

}

而且我无法理解一件看似简单的事情:编译器如何“知道”何时停止递增循环变量“i”?令人惊讶的是,代码确实按照预期的方式工作。

最佳答案

编译器不知道什么时候停止。

for(i = 0; p[i]; i++)

只会在 p[i]0 时停止。你很幸运,p[5] 恰好是 0。没有什么可以说它必须如此并且它可以像this example一样继续下去.一旦 i >= array size 你正在访问数组不拥有的内存,你就进入了 undefined behavior 的世界.

此外,如果您在数组中有一个 0,例如

int inumbers[] = {1 ,2 , 0, 4, 5};

那么程序只会打印

1
2

并且它不会访问数组的其余部分。

处理数组或标准容器时,您可以使用 ranged based for loop喜欢

for (const auto & e : inumbers)
std::cout << e << '\n';

遍历它的内容。然后 const & 在这种情况下并不是真正需要的,因为我们正在处理一个 int 但这是一个很好的习惯,因为通过引用传递避免复制并使其成为 const防止您在执行只读操作时意外修改元素。

当处理一个指针时,你需要提供一个像这样的大小

for (int i = 0; i < size_of_pointed_to_array, i++)
std::cout << p[i] << '\n';

关于c++ - 在 C++ 中索引整数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36287902/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com