2017-04-10 204 views
-1

我开始学习C++中的指针,并编写了下面的代码来练习使用它们访问数组中的元素。指针超出数组范围

using namespace std; 
char a[] = {'A', 'B'}; 
char* p = a; 

cout << "ARRAY IS " << sizeof(a) << " BYTES." << endl; 
cout << "CHARACTER IS " << sizeof(a[0]) << " BYTES." << endl; 
cout << "THEREFORE LENGTH IS " << (sizeof(a)/sizeof(char)) << " ELEMENTS." << endl << endl; 

cout << "INDEX 0: " << *p << endl; 
p++; 
cout << "INDEX 1: " << *p << endl; 
p++; 
cout << "INDEX ?: " << *p << endl; 
p++; 
cout << "INDEX ??: " << *p << endl; 

return 0; 

我明白,数组只有两个元素长,但试图增加指针。

当我这样做the字符打印到控制台时该怎么办?

我使用Visual Studio作为我的IDE。

+1

你的程序的行为是未定义的 - 它可以打印任何东西,或者什么也不打印,或者完全执行其他操作。 –

+0

访问数组越界是未定义的行为。这意味着任何事情都可能发生:崩溃,垃圾等等。 – crashmstr

回答

-1

你碰巧得到那个角色,因为这就是存储在哪里p点。不过,下次运行程序时不一定会保持不变。

p仍指向某处,只是超出了分配的数组。在实践中,我敢打赌它指向自己,因为p被分配在数组之后。

+0

这个downvote很快。如何评论详细说明? – donjuedo

+0

我没有投票,但你的答案错过了最重要的部分:给定的代码有未定义的行为。在下一次运行中,它*可能*只是打印其他垃圾,但它会杀死你的猫(或邻居猫)同样合法 –

+0

@DanielJour,我相信我的第二句话击中了头部。也许我对这个原因不够清楚。 – donjuedo