回 帖 发 新 帖 刷新版面

主题:关于数组名的问题

各位好:
本人最近学习vc++,遇到了一点问题。关于数组名于指针的关系问题,希望高手能指点迷津
我写了几行程序:
#include<iostream>
using namespace std;
void main()
{
 int a[2][2]={0,0,0,0};
 a+1;
}
编译之后给出一条警告信息warning C4552: '+' : operator has no effect; expected operator with side-effect我的理解是'+'运算符没有起作用,但是将上边的a+1改成
cout<<*(*(a+1))<<endl;就能输出0.我的问题是既然这个加号没有作用怎么在*(*(a+1))中能起作用呢?渴望得到高手指点。谢谢!

回复列表 (共2个回复)

沙发

*(*(a+1)):

  *(a+1)表示的是a[0][0]的值,是0

  *(*(a+1)), *0当然是错误的。没有报错可能是因为cout重载时对*0做了特殊处理,实际上如果把0看成指针的话已经访问违规了。至于那条警告,编译器找不到典型赋值运算,又找不到类似++,--的运算,这条语句没有实际任何意义。

板凳

我还想问一句,那个数组名a本质上来说是一个地址常量,储存着二维数组的首地址,那么a+1这个表达式应该是有意义,我个人觉得让这个表达式有意义是由于解引用运算符*号的作用

我来回复

您尚未登录,请登录后再回复。点此登录或注册