首页 新闻 会员 周边

关于c++中的数组指针使用的一个问题

0
悬赏园豆:15 [待解决问题]

int test[3] = {1,2,3};

cout<<test[3]<<endl;    // 会报错

但是

int test[3] = {1,2,3};

int (*A)[3];

A = &test;

cout<<test[3]<<(*A)[3]<<endl;  // 输出 -858993460

则不会报错有没有人 知道为虾米啊。。。 困惑啊。。

问题补充:

关键是A= &test;

这一步不知道做了什么导致test【n>=3】;都不会报错

11111010的主页 11111010 | 初学一级 | 园豆:155
提问于:2011-08-26 21:18
< >
分享
所有回答(6)
0

在C++的某些版本中‘“<<”的结合性有可能不一样,有的是左结合,有的的右结合,你上面的结果是因为“<<”是右结合性的,先输出的是(*A)[3],而(*A)[3]是指向的一块未知内存区域,所以会输出不知的结果,希望对你有所帮助

yangtam | 园豆:369 (菜鸟二级) | 2011-08-26 22:19
但是如果我 分开输出还是会有这样的问题啊
cout<cout<<(*A)[3]<
支持(0) 反对(0) 11111010 | 园豆:155 (初学一级) | 2011-08-26 23:04
0

貌似,数组的长度不够

cici.fan | 园豆:46 (初学一级) | 2011-08-26 23:53
0

数组越界。下标从0开始的。即 test[0] ,test[1],test[2]

cout<<test[2]<<endl;

cout<<test[2]<< (*A)[3];<<endl;

就可以了。

newplumage | 园豆:210 (菜鸟二级) | 2011-08-29 15:00
-1

指针直接指向地址,不存在越界的可能性。只是会答案错误而已。

shark_cf | 园豆:210 (菜鸟二级) | 2011-09-10 20:27
1

会报错 是什么意思。  你用的是windows吗

linux上test[100]也不会报错的, 访问的话输出一个负值, 赋值肯定不行。 不同系统应该不一样

ShaPherD | 园豆:275 (菜鸟二级) | 2011-09-28 15:24
0

哥,指针越界了。。。第二个编译过是因为你用的是指针。。。

hoodlum1980 | 园豆:559 (小虾三级) | 2012-06-07 17:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册