終於開始自學C++了,心情好激動。今天看書發現一個關於“指針算術”的有趣的小例子,感覺作爲面試題會有點意思,所以想記下來。
大家看看下面這段代碼會輸出什麼?
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int jay[10]={5,2,8,4,1,2,2,4,6,8};
int* pt = jay;
pt = pt + 1;
int* pe = &jay[9];
pe = pe - 1;
int diff = pe - pt;
cout<<"diff="<<diff<<endl;
system("pause");
return 0;
}
我的第一直覺是等於4,jay[8]-jay[1]=6-2=4. 可是書上說結果是7,我一運行,果然是7.
想了好久終於想通了,原來pe-pt的含義是jay[8],jay[1]這兩個元素之間的“距離”。
如果要得到4,可以這麼寫:
int diff = *pe - *pt;
而下面這種寫法,是指針地址作爲數字的差,即28=7x4:
long diff = (long)pe - (long)pt;
指針真是一個好玩又危險的東西!