1、 int *p[10]; //指針數組,含有10個指針元素
也就是說每一個元素都是指針。
先是解析[]表示它是一個數組,然后*表示指針,int表示為int型指針,
即表示定義一個指針數組,含有10個int類型指針元素。
可以這樣初始化:
for(int i=0; i<10;i++)
{
p[0] = &i; // 每個元素都是指針
}
2、與int * q 進行對比
int * q ; //表示 q是指向 int的一個指針,即只是一個指針。
但是如果 q 指向一個數組的首地址,那么可以用 q[] 這樣的形式來訪問數組的元素。
如下:
int students[] = { 101, 102, 103, 104, 105, 0, 0, 0, 0, 0, 201, 202,203, 204, 0, 0, 0, 0, 0, 0, 301, 302, 303, 0, 0, 0, 0, 0, 0, 0 };
int * q = students;
cout << q[0]<<endl; // 輸出 101
3、對上面進行總結
p[0] 是一個指向int的地址, q[0] 是一個int 值。
4、對指針數組進行引申
int * p[10] 這種 是針對基礎數據類型的。
實際情景下,數組里面存儲的 是指向自定義結構體、類的指針。
舉例如下:
IndexItem *g_indexItem[3]; //元素是指針
初始化:
(1)正確
g_indexItem[0] = new IndexItem(1, 0, 5);
g_indexItem[1] = new IndexItem(2, 10, 4);
g_indexItem[2] = new IndexItem(3, 20, 3);
(2)錯誤
g_indexItem = {new IndexItem(1, 0, 5),new IndexItem(2, 10, 4),new IndexItem(3, 20, 3); }
這種應該是可以的,但是在VS 下編譯確實報錯了。
(3)錯誤
g_indexItem = NULL;
會報 0 不能轉換為 IndexItem 類型指針。