我怎么能理解& *(x + i)?

时间:2016-03-08 11:15:41

标签: c++ arrays point

这是c ++代码:

 'afterValidate'=>"js:function(form, data, hasError) {
    if(document.forms['user-form'].required-label.value == '') {
                    $('<li>Field cannot be blank</li>').appendTo('#user-form_es_');
                     $('.required-label').css( 'border-color', '#a94442 ' );
                    $('label[for=requiredField]').css('color','#a94442 ');
                }
                else {
                       $('.required-label').css( 'border-color', '#3c763d ' ) ;
                       $('label[for=.required-label]').css('color','#3c763d ');
                        return true;

                 }
}

至于x[5]={1,2,3,4,5}; &x[i]==&*(x+i)==x+i; ,在我看来,&*(x+i)是一个右值,为什么要使用*(x+i)。 为什么呢?

2 个答案:

答案 0 :(得分:2)

这一行&x[i]==&*(x+i)==x+i; shell显示了获取数组特定元素地址的3种不同方法。

在您的情况下,有一个数组x,它存储5个值。 probaly的第一件事看起来很熟悉。 x[i]将获得i的第x个元素,并使用运营商地址,您将获得{{1}的地址} -th的元素。

让我们继续讨论第三个声明i。由于x+i实际上只是一个指针指向存储中实际数组的第一个元素的地址,因此您可以通过向x添加偏移量来获取其他元素的地址。但是,因为您正在使用x&#39;解决你不会得到“抵消”的价值。元素,但它的地址。要获得使用神奇的x来解除地址所需的价值。因此,如果*获得&x[i]元素的地址且i执行相同操作,则x+i将执行与*(x+i)相同的操作。它将获得x[i]的{​​{1}}值。

不知道操作员地址i derefencing-operator x是什么。在第二个陈述之前相当简单。 &将获取*元素的地址。 (x+i)将通过取消引用地址来获取值,i将获得解析地址的地址。所以第二个陈述与写*(x+i)

是一回事

然而,解释的行可能会给你一个编译器错误,因为它应该更像这样:&*(x+i)

结论:所有这些事情都做了同样的事情,但略有不同。

答案 1 :(得分:0)

假设我们有这段代码

imagesc

然后这个比较是正确的:

int i = 0;
int x[5]={1,2,3,4,5};

这种比较也是出于类似的原因。

&x[i] == &*(x+i)