雖說編程語言都是相通的,確實如此,先前學的為后來打下了基礎(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].