C基礎(chǔ)(再憶起C/C++)

字號(hào):

C基礎(chǔ)語言,C++,Java,Java/J2E,C#。
    呵呵,看起來不少語言。
    雖說編程語言都是相通的,確實(shí)如此,但是,各門語言到細(xì)處還是有很多不同的,現(xiàn)用現(xiàn)學(xué)吧。
    為什么又想到C/C++了呢?因?yàn)楸淮驌袅耍旅孢@題為例:
    int main(int argc, char *argv[])
    {
    int a[]={1,2,3,4,5};
    int* p=(int*)(&a+1);
    cout << "a = " << *(a+1) << endl;
    cout << "p = " << *(p-1)<< endl;
    return 0;
    }
    答案是啥:
    a = 2
    p = 1
    恭喜你,答錯(cuò)了!
    心里哇涼哇涼的?。?!
    正確答案:
    a = 2
    p = 5
    考試大提示原因:
    &a是數(shù)組指針,其類型為 int (*)[5];而指針加1要根據(jù)指針類型加上一定的值,不同類型的指針+1之后增加的大小不同。a是長度為5的int數(shù)組指針,所以要加 5*sizeof(int),所以p實(shí)際是a[5]。但是p與(&a+1)類型是不一樣的(這點(diǎn)很重要)所以p-1只會(huì)減去sizeof(int*)
    注意:a,&a的地址是一樣的,但意思不一樣,a是數(shù)組首地址,也就是a[0]的地址,&a是對(duì)象(數(shù)組)首地址,a+1是數(shù)組下一元素的地址,即a[1],&a+1是下一個(gè)對(duì)象的地址,即a[5].