最近看到了数组指针,测试一段代码的时候有一些疑问
#include<iostream>#include<cstdio>
using
namespace std;
int main(void)
{
static
int a[2]={1,2};
int p=5,p2=6,*page,*page2;
int Test[2][3] = {{1,2,3},{4,5,6}};//测试二维数组
int Test2[3] = {1,2,3};//测试数组
page =
&p;
page2 =
&p2;
int (*A)[3],(*B)[3];//数组指针
A =
&Test[1];
B =
&Test2;
cout<<*page<<endl;
cout<<(*A)[0]<<(*A)[1]<<(*A)[2]<<endl;
//cout<<(*A)[3]<<(*A)[4]<<(*A)[5]<<(*A)[6]<<endl;
//cout<<(*B)[0]<<(*B)[1]<<(*B)[2]<<endl;
cout<<(*B)[3]<<endl;
//cout<<(*B)[4]<<(*B)[5]<<(*B)[6]<<endl;
return
0;
}加注释的是我后来测试的,我说说我的疑惑,题目int (*A)[3],(*B)[3];定义了两个数组指针,
然后A = &Test[1];将A指向Test数组的第二行,
输出cout<<(*A)[0]<<(*A)[1]<<(*A)[2]<<endl;这一句应该输出4 5 6也没有错,
但是为什么我后面加上cout<<(*A)[3]<<(*A)[4]<<(*A)[5]<<(*A)[6]<<endl;这一句还能够编译通过呢,
输出是1 2 3 5这是为什么呢,
同理B指向数组Test2,Test2中一共有三个元素,输出(*B)[3]不是已经越界了吗,
但cout<<(*B)[3]<<endl;这一句却输出5,
而且cout<<(*B)[4]<<(*B)[5]<<(*B)[6]<<endl;这一句的(*B)[4]输出6,
后面的两个输出(*B)[5]和(*B)[6]才显示错误(是很小的负数),不太理解
|