指針數組和數組指針梳理

一、指針數組


可以理解爲指針的數組,即元素爲指針的數組
請看如下幾組例子:

char *p = "abc";
char *q = "kk";

char *a[] = {p,q};  //指針數組


cout << "a爲:  "<<a << endl;
cout << "*a爲:  " << *a << endl;
cout << "a+1爲:  " << a + 1 << endl;
cout << "*(a+1)爲:  " << *(a + 1) << endl;
cout << "*a+1爲:  " << *a + 1 << endl;

結果爲:
這裏寫圖片描述

關於a的初始化:

char *p, *q;
char *a[] = {p,q};  //不能通過編譯
p="abc";
q="kk";

因爲上面例子中指針數組中的元素p和q未被初始化,不能通過編譯.

關於a的賦值:

char *p = "abc";
char *q = "kk";
char *r = "rr";
char *a[] = {p,q};  //指針數組
*a=r; //正確的賦值操作,等同於將r賦給p 等同於 a[0]=r;
*(a+1)=r; //給a的第二個元素賦值 等同於a[1]=r;

a的大小sizeof(a) = 元素個數 * 地址長度(32位爲4,64位爲8)

二、數組指針


數組指針,即指向數組的指針,常用於指向二維數組
如下代碼:

#include <iostream>
using namespace std;
int main()
{
    int a[2][6] = { { 1, 2, 3, 4, 5, 6 }, { 11, 12, 13, 14, 15, 16 } };
    int(*p)[6] = a;

    cout << "p的大小爲:" << sizeof(p) << endl;
    cout << "**p爲:" << **p << endl;  //首個元素的值
    cout << "*p爲:" << *p << endl;    //首個元素的地址
    cout << "p[0]爲:" << p[0] << endl;//首個元素的地址
    cout << "p爲:" << p<< endl;       //首個元素的地址

    cout << "a[0][1]元素表示爲*(*p+1) :" << *(*p + 1) << endl;
    cout << "a[0][1]元素表示爲*(p[0]+1) :" << *(*p + 1) << endl;
    cout << "a[1][0]元素表示爲**(p+1) :" << **(p + 1) << endl;
    cout << "a[1][0]元素表示爲*(p[1]) :" << *(p[1]) << endl;
    system("pause");
}

執行結果如下:
這裏寫圖片描述

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