C语言指针数组指针怎样理解?

如题所述

    指针数组,指数组元素就是指针

    数组指针,对于一维数组来说就是数组名

    故对于一维数组来说,数组名是第一个元素的指针,而元素本身也是指针,故数组名是指向指针的指针。

    例如: int * p = &a; int ** q = &p;

    则p中储存的是整形变量a的地址,而指针p自身也是变量(指针变量通常占4个字节),故q中储存的就是变量p的地址。q就成了指向指针的指针。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-09-23

1、指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针;数组指针:a pointer to an array,即指向数组的指针。
int* a[4]     指针数组    
                  表示:数组a中的元素都为int型指针   
                  元素表示:*a[i]   *(a[i])是一样的,因为[]优先级高于*
int (*a)[4]  数组指针    
                  表示:指向数组a的指针
                  元素表示:(*a)[i]  

2、下面通过实例来说明数组指针与指针数组的区别:  

#include <iostream>
using namespace std;
int main()
{
    int c[4]={1,2,3,4};
    int *a[4];   // 指针数组
    int (*b)[4]; // 数组指针
    b=&c;
    // 将数组c中元素赋给数组a
    for(int i=0;i<4;i++)
    {
        a[i]=&c[i];
    }
    // 输出看下结果
    cout<<*a[1]<<endl;   // 输出2
    cout<<(*b)[2]<<endl; // 输出3
    return 0;
}

相似回答