程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 再憶起C/C++

再憶起C/C++

編輯:關於C++

C已經放下很久了,大一學的基礎語言,之後學C++,學/用VC好長一段時間,直到大三 上Java畢設用Java,然後是直到4個月前一直用Java/J2EE的東西,現在又改用了C#。

呵呵,看起來學了不少語言。

雖說編程語言都是相通的,確實如此,先前學的為後來打下了基礎。但是,各門語言 到細處還是有很多不同的,現用現學吧。

現在又是找工作的時候了,論壇裡到處是筆經、面經、筆試題,等等,又忙起來了( 呵呵,不是我)

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

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是數組指針,其類型為 int (*)[5];而指針加1要根據指針類型加上一定的值, 不同類型的指針+1之後增加的大小不同。a是長度為5的int數組指針,所以要加 5*sizeof(int),所以p實際是a[5]。但是p與(&a+1)類型是不一樣的(這點很重要)所 以p-1只會減去sizeof(int*)

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved