作者:SHI家的魚
鏈接:https://www.zhihu.com/question/41805285/answer/202040382
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
鏈接:https://www.zhihu.com/question/41805285/answer/202040382
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
1. 己址
數組和指針,都是有自己的地址的。在代碼中,你可以用取地址運算符“&”來取得。程序中是:
printf("%x %x\n", &pInt, &arr);
2. 己值
數組和指針,都是有自己的數據值的。程序中,數組arr的數據值,是arr[0]的地址;而對於指針pInt,通過
pInt = arr;
之后,pInt的數據值也是arr[0]的地址。
但是,有一點不一樣的是,arr的數據值是不可以改變的,是個常量;而指針變量pInt的數據值,是可以改變的,你可以:
pInt = arr;
你也可以:
pInt = arr + 1;
隨你!
另外,都可以在數組和指針的己值上,做運算,比如:
arr + 1;
pInt + 1;
3. 他值
數組和指針,在獲取他值時,在代碼的寫法上是一樣的。比如對於數組,你想獲取第2個元素的值,你可以這樣寫:
arr[1];*(arr + 1);
對於指針pInt,你也可以這樣寫:
pInt[1]; *(pInt + 1);
也可以在數組和指針的他值上做運算,比如:
arr[0] + 1; *arr + 1; *(arr + 1) + 1;
pInt[1] + 1; *pInt + 1; *(pInt + 1) + 1;
4. 總結
數組和指針在概念上是不一樣的,但是在代碼的寫法上,有些是一樣的。有興趣的朋友,可以結合我的文章中提出的“兩己三他”:己址、己值、他值、他址、他型這5個維度來理解。
