1.數組名錶示數組的第一個元素的地址。
2.&a(a是一個數組)是數組的地址。
3.指針數組是一個數組,它的元素是指針。
4.數組指針是一個指針,它指向一個數組。
5.二維數組的元素是一維數組
6.二維數組數組名的本質是一個指向一維數組的數組指針
譬如:a[2][3] - -》那麼a是二維數組首元素的地址,本質是 int(*ptr)[3]。那麼&a的本質就是二維數組的地址。
本文較爲詳細的分析了關於理解C++指針數組,數組指針,數組名,二維數組的一些技巧。是比較重要的概念,相信對於大家的C++程序設計有一定的幫助作用。
一、關於數組名
假設有數組:
int a[3] = {1, 2, 3}
1.數組名代表數組第一個元素的地址,注意,不是數組地址(雖然值相等),是數組第一個元素地址,a 等同於 &a[0];
a+1是第二個元素的地址。比第一個元素地址a(或者&a[0])超出了一個整型指針的大小,在這裏是4個字節(byte)
cout << a << endl;//會輸出數組第一個元素地址。
2.取址符號&.
&a是數組的地址,注意是數組的地址,表示數組這個整體的地址。不是數組第一個元素的地址(雖然他們的值相同)
&a+1比數組的地址&a超出了一個數組的地址大小,在這裏是3*4個字節
int * p = &a;這條語句是不成立的。左邊指針變量p時指向整型的指針,而右邊是數組(類型是數組)的地址,不是數組元素(類型是整型)的地址,所以不能賦值。
應該賦值給數組指針(下面會講到)。
關於數組名,切記以上兩點。
二、關於指針數組
1.定義
指針數組,就是存放指針的數組,數組裏的元素是指針(對比於整型數組,整型數組就是存放整型的數組,數組裏的元素是整型)
int *ptr[3];如何理解?按照運算符優先級,[]優先級較大,所以ptr先與[3]結合,表示ptr是一個數組,必然要明確數組的元素類型,所以數組裏的元素類型是整型指針(int*),數組的大小不一定需要(定義數組時可以根據初始化的元素個數確定)
ptr[0]就是數組的第零個元素,它是一個整型指針。
示例如下:
int a[3] = {1, 2, 3};
int x = 5;
ptr[0] = &x;
ptr[1] = &a[2];
2.如何使用?
像一般指針一樣使用。*ptr[0]就是第零個元素(一個指針)所指向元素的值,這裏是 5。
三、關於數組指針
1.定義
數組指針,就是指向數組的指針,它是一個指針,指向一個數組(對比於整型指針,就是指向整型的指針,它是一個指針,指向一個整型)
int (*ptr)[3]; 如何理解?先看小括號裏面,*ptr說明ptr是一個指針,然後跟[]結合表明這個指針指向一個數組,數組的元素是int
int a[3] = {1, 2, 3};
int(*ptr)[3] = a;//這條語句不成立。
右邊a是數組名,還記得上面說的嗎,數組名代表數組第一個元素的地址,就是&a[0],數組名的類型相當於整型指針(不知道事實上是不是)int *,因爲它指向了第一個元素,第一個元素是int
左邊ptr的類型是int(*)[],是數組指針,指向數組的指針,不是指向整型的指針,不能賦值。
int a[3] = {1, 2, 3};
int (*ptr)[3] = &a;//正確。
因爲a是一個數組,&a就是數組的地址,還記得上面說的嗎?
2.如何使用?
int a[3] = {1, 2, 3};
int (*ptr)[3] = &a;
cout << (*ptr)[0] << endl; //輸出1
cout << (*ptr)[1] << endl; //輸出2
這裏有一點難以理解。不防對比一下一下代碼。
int a[3] = {1, 2, 3};
int x = 5;
int * p = &x;
cout << *p << endl; //輸出5
p是一個指向整型的指針,*p就是所指向的變量(整型x)的值。同理ptr是指向數組的指針,*ptr就是所指向的變量(數組a)的值。(*ptr)[0]就是數組的第零個元素。
四、關於二維數組
1.二維數組是一個數組,它的元素是一維數組。謹記這一點,然後把上面的套進來就行了。
int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
數組名
a是數組第一個(或者說第零個更好)元素的地址,第一個元素是一維數組,a[0] ------> {1, 2, 3}。a+1是第二個元素的地址,就是第二個一維數組的地址,超出了3*4個字節
&a是數組的地址,&a+1 就是超出了一個二維數組的大小,超出了3 * 4 * 3 個字節。
數組指針
int (*ptr)[3] = a; //正確。
因爲a表示第一個元素的地址,第一個元素是一個一維數組,所以a表示一個一維數組的地址,一個數組的地址賦值給數組指針,成立。
五、總結:
1.數組名錶示數組的第一個元素的地址。
2.&a(a是一個數組)是數組的地址。
3.指針數組是一個數組,它的元素是指針。
4.數組指針是一個指針,它指向一個數組。
5.二維數組的元素是一維數組
6.二維數組數組名的本質是一個指向一維數組的數組指針
譬如:a[2][3] - -》那麼a是二維數組首元素的地址,本質是 int(*ptr)[3]。那麼&a的本質就是二維數組的地址。