C/C++ -電腦資料

電腦資料 時間:2019-01-01 我要投稿
【clearvueentertainment.com - 電腦資料】

   

    雖說編程語言都是相通的,確實如此,先前學的為后來打下了基礎(chǔ),

C/C++

。但是,各門語言到細處還是有很多不同的,現(xiàn)用現(xiàn)學吧。

    現(xiàn)在又是找工作的時候了,論壇里到處是筆經(jīng)、面經(jīng)、筆試題,等等,又忙起來了(呵呵,不是我)

    為什么又想到C/C++了呢?因為被打擊了,下面這題(筆經(jīng)中的)沒做對:

    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

    恭喜你,答錯了!

    心里哇涼哇涼的。!

    正確答案:

    a = 2

    p = 5

    原因:

    &a是數(shù)組指針,其類型為 int (*)[5];而指針加1要根據(jù)指針類型加上一定的值,不同類型的指針+1之后增加的大小不同,

電腦資料

C/C++》(http://clearvueentertainment.com)。a是長度為5的int數(shù)組指針,所以要加 5*sizeof(int),所以p實際是a[5]。但是p與(&a+1)類型是不一樣的(這點很重要)所以p-1只會減去sizeof(int*)

    注意:a,&a的地址是一樣的,但意思不一樣,a是數(shù)組首地址,也就是a[0]的地址,&a是對象(數(shù)組)首地址,a+1是數(shù)組下一元素的地址,即a[1],&a+1是下一個對象的地址,即a[5].

最新文章