c++语法之预定义索引

 

首先,我们来看下c++下面的一个语句:

(-2)[p] = 4;

 

如果看到这样的语法的,知道的就不用往下看了,不知道的,就可以继续。。。 :)

 

先看下下面的代码:

 

编译:g++ -g -Wall main.cpp

运行:./a.out

输出:

i=0
i=0
i=0
i=0
i=0
i=0
i=0
i=0
i=0
i=0
i=0
i=0

 

载看下预定义索引运算符的句子:

    int *p = &ary[5];
    p[2] = 7;


预定义索引运算符是某些指针运算和反引用的缩写。

表达式p[2]和*(p+2)是等价的。

 

并且我们也知道,在c中负索引是合法的,所以我们也可以这样:

p[-2] = 2;

*(p-2) = 3;

上面中的p[-2]和*(p-2)是等价的,而*(p-2)和*(p+-2)等价,*(p+-2)==>*(-2+p)==>(-2)[p];因为[]的优先级比负号高,所以-2要加上括号。

 

注意的是这种索引运算符的交换性仅仅适用于预定义指针的用法,所以,下次我们看到2[p]这样的用法,则应知道是在处理预定义索引的用法,而不是重载了operator[]。

 

看下完整的代码和输出:

输出:

i=0
i=0
i=0
i=0
i=0
i=0
i=0
i=0
i=0
i=0
i=0
i=0

i=0
i=0
i=0
i=0
i=0
i=0
i=0
i=7
i=0
i=0
i=0
i=0

i=0
i=0
i=0
i=0
i=0
i=0
i=0
i=8
i=0
i=0
i=0
i=0

i=0
i=0
i=0
i=2
i=0
i=0
i=0
i=8
i=0
i=0
i=0
i=0

i=0
i=0
i=0
i=3
i=0
i=0
i=0
i=8
i=0
i=0
i=0
i=0

i=0
i=0
i=0
i=4
i=0
i=0
i=0
i=8
i=0
i=0
i=0
i=0

 

展开阅读全文

没有更多推荐了,返回首页