整型数组指针在c++中的实现

Integer array pointer implementation in C++

本文关键字:实现 c++ 数组 指针 整型      更新时间:2023-10-16
int a[5]={1,2,3,5,6};
int *apnt= a;
while (*apnt)
{
 printf("The no is %dn",*apnt);
 apnt++;
}

不像字符串,我知道在数组的末尾没有null元素。然而,我的代码总是给出以下输出,无论我多少次刷新内存,或重新启动xcode。这里发生了什么?谁能给我点化一下吗?

输出为:

The no is 1
The no is 2
The no is 3
The no is 5
The no is 6
The no is 32767
The no is 144723190
The no is 1694538263
The no is 1606416704
The no is 32767
The no is -1982110263
The no is 32767

读取数组的末尾是未定义的行为。你所看到的,即使你看到了什么,也是c++语言规则无法预测的。

你得到这个输出是偶然的,它可能在每台机器上都不同,甚至每次运行。这里它做了一些其他的事情,但是它真的可以做任何事情

我认为其他的答案是错误的你的问题的意图-我假设你不是试图在c++中找到未定义的行为,只是寻找迭代你的数组。在你的代码中的问题,是你不断增加指针apnt超过数组的结束。这是未定义的行为,任何事情都可能发生。

然而,通常在这种情况下发生的是,您将继续读取 a数组(函数中的其他局部变量)之后的内存。这解释了为什么"乱码"输出是可预测的。相反,你应该只迭代数组中元素的数量(例如:使用for循环),或者您可以在数组末尾添加'0',这样while循环将终止。