一、一維陣列
*這裡記住陣列的首位址和陣列首元素的位址是不一樣的,雖然他們的值是一樣的,但是代表的意思不一樣;
*陣列 int a[5];
* a是陣列的共五個整形資料的記憶體的名字,是一塊連續的位址的名字;
* a代表首元素的位址同&a[0]是一樣的;所以a+1代表的是第二個元素的位址
* &a則是整個記憶體空間的位址,所以&a+1代表的是陣列之後的另一塊陣列的首位址,已經超過陣列a了,則*(&a + 1)越界
* a 、 &a 、 &a[0]的值是一樣的,但是代表的意義不同
* a 和 &a[0]都是代表首元素的位址,+1 之後都是a[1]的位址,所以*(a+1)表示a[1]的值
* &a 則代表整個陣列的記憶體位址,+1 之後越界到陣列外面去了
例子:
#include
using namespace std;
int main() ;
int *ptr = (int *)(&a + 1);
cout << *(a + 1) << " " << *(ptr-1) << endl;
system("pause");
return 0;
二、二維陣列
int a[3][2] = ;
cout << *(*(&a[0] + 1)) << " " << *(*(&a[0] + 1) + 1) << endl;
//a[0]是第一組元素,算乙個元素,也是位址,所以&a[0]是乙個二重指標;那麼後面就需要兩重間訪
//又因為陣列中a 和 &a[0]意思相同,都是第乙個元素的位址(不同於&a是整個陣列的首位址)
//所以上面還可以寫成*(*(a+1)+1)的形式都是表示的a[1][1];
cout << *(*(a+1)+1) << endl;
頂
a 0 和 a 0 的區別
在c語言的使用過程中,會經常遇到與字元 0 進行運算的情況,那他們的區別是什麼,我在這個地方將它們記錄下來 在ascii表中,可以查到字元 0 對應的十進位制數為48.然後進行如下的運算。int a 49 char b a printf a c n a printf b d n b printf a...
陣列和指標 以及 指標和引用 的區別
1 概念不同2 空間分配 陣列是靜態分配,且分配的空間是連續的 指標是動態分配,分配的空間不一定是連續的。3 大小不同 求sizeof 陣列 陣列所佔儲存空間的記憶體 sizeof 陣列名 陣列的大小 sizeof 陣列名 sizeof 資料型別 指標 在32位平台下,無論指標的型別是什麼,size...
陣列指標和指標陣列的區別
陣列指標 也稱行指標 定義 int p n 優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p 1時,p要跨過n個整型資料的長度。如要將二維陣列賦給一指標,應這樣賦值 int a 3 4 int p 4 該語句是定義乙個陣列指標,指向...