指針算術

終於開始自學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;

指針真是一個好玩又危險的東西!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章